TestContext.WriteLine doesn’t accept curly brackets

In test class I was using TestContext.WriteLine trying to output JSON string, I’ve got
System.FormatException : Input string was not in a correct format.
at System.Text.StringBuilder. AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
at System.String.Format(IFormatProvider provider, String format, Object[] args)
at Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestContextImplementation.WriteLine(String format, Object[] args)

Example of code that works for Debug.WriteLine, but not for TestContext.WriteLine is the following:

var msg = “{curly braces}”;
Debug.WriteLine(msg);
TestContext.WriteLine(msg);

I found, that TestContext.WriteLine expects first parameter as a format string, that consider { and } as placeholder delimiters.

UPDATE: Simple workaround,  suggested in a comment by Steve Gilham

TestContext.WriteLine(“{0}”,msg);

I had to write EscapeCurlyBraces extension

public static string EscapeCurlyBraces( this string message)
{
string ret = message.Replace( “{“, “{{” ).Replace(“}”, “}}”);
return ret;
}

and call
TestContext.WriteLine(msg.EscapeCurlyBraces() );
I’ve wrote a suggestion to MS Connect that it will be good to have separate overload TestContext.WriteLine(string msg); that doesn’t consider the parameter as format and doesn’t expect any additional parameters.

The file  https://github.com/MNF/CommonDotNetHelpers/blob/master/src/Strings/StringFormatExtensions.cs and corresponding unit tests https://github.com/MNF/CommonDotNetHelpers/blob/master/Tests/Strings/StringFormatExtensionsTests.cs are located on GitHub.

Advertisements