如何在出现差异时让NUnit集合比较调用ToString

时间:2011-09-07 20:02:30

标签: c# unit-testing nunit

我正在使用VS 2010,并使用NUnit运行我的单元测试。以下行正确检测两个列表是否不同:

        CollectionAssert.AreEqual(expected, actual);

但是,我想要一个比以下更好的错误消息:

Expected and actual are both <System.Collections.Generic.List`1[MyNamespace.MyClass]> with 2 elements
  Values differ at index [0]
  Expected: <MyNamespace.MyClass>
  But was:  <MyNamespace.MyClass>

在MyNamespace.MyClass中,我实现了以下方法:

public new string ToString()

我希望NUnit输出以下内容:

Expected and actual are both <System.Collections.Generic.List`1[MyNamespace.MyClass]> with 2 elements
  Values differ at index [0]
  Expected: <24 ounces of cold beer>
  But was:  <2.4 ounces of rotten tomatoes>

但是,NUnit不会调用它。我错过了什么?

1 个答案:

答案 0 :(得分:5)

隐藏该方法来自object而不是覆盖它。使用此:

public override string ToString()

基本上NUnit只是调用object.ToString() - 你没有覆盖它。除非它专门寻找带有反射的 new 方法,否则它找不到你的方法 - 并且覆盖是这样做的惯用方法。这只是一个简单的错误,还是因为某些原因你意味着影响方法?