Mar*_*tin 1 c# stringbuilder unit-testing tostring implicit-conversion
我刚刚编写了一个小单元测试,其中我使用了StringBuilder.
var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");
Assert.AreEqual(stringBuilder, "Foo");
Run Code Online (Sandbox Code Playgroud)
此测试将失败.
Expected: <Foo>
But was: "Foo"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将Assert更改为
Assert.AreEqual(stringBuilder.ToString(), "Foo");
Run Code Online (Sandbox Code Playgroud)
测试将通过.
那么隐式调用和ToString()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?
在第一个示例中,您正在测试您的StringBuilder
实例是否等于字符串,这将失败.
在第二个中,您正在测试调用的结果ToString()
(字符串)是否等于另一个字符串.
括号(<>)是NUnits方式,表示它有一个非字符串对象,但为了显示该消息,NUnit调用ToString()
该对象.
Expected: <Foo> But was: "Foo"
Run Code Online (Sandbox Code Playgroud)
所以<Foo>
是一个Foo
在调用时返回的对象ToString()
,而"Foo"
只是一个String
Foo.
MSTest会向您显示不同的消息,这将更加清晰:
Expected:<Foo (System.Text.StringBuilder)>. Actual:<Foo (System.String)>.
Run Code Online (Sandbox Code Playgroud)