2

を使用した小さな単体テストを作成しましたStringBuilder()

var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");

Assert.AreEqual(stringBuilder, "Foo");

このテストは失敗します。

Expected: <Foo>
But was:  "Foo"

しかし、Assert を

Assert.AreEqual(stringBuilder.ToString(), "Foo");

テストに合格します。

ToString()では、メソッドの暗黙的な呼び出しと明示的な呼び出しの違いは何ですか? または/そして、これらのブラケット ( <>) は何を表していますか?

4

2 に答える 2

6

最初の例では、StringBuilder インスタンスが文字列と等しいかどうかをテストしていますが、これは失敗します。

2 番目のものでは、(文字列である) への呼び出しの結果がToString()他の文字列と等しいかどうかをテストしています。


括弧 (<>) は、文字列以外のオブジェクトを取得したことを示す NUnits の方法ですが、メッセージを表示するにはToString()、そのオブジェクトに対して NUnit を呼び出します。

Expected: <Foo> But was: "Foo"

への呼び出し<Foo>で返されるオブジェクトもそうですが、は単なるFooです。FooToString()"Foo"String

MSTest は、より明確な別のメッセージを表示します。

Expected:<Foo (System.Text.StringBuilder)>. Actual:<Foo (System.String)>.   
于 2012-08-07T11:21:19.030 に答える
0

最初のバージョンでは、ToString への暗黙的な呼び出しはありません 。これは、Console.WriteLine などのメソッドでのみ発生します。

したがって、実際に起こることは、stringbuilder オブジェクトを文字列オブジェクトと同等にすることです。タイプさえ一致しません:-)

于 2012-08-07T11:23:03.527 に答える