在NUnit中覆盖ToString而无需访问源代码

Ric*_*chK 3 c# nunit

我有一个类,Foo来自第三方库,我使用NUnit检查与另一个实例的相等性,

Assert.AreEqual(foo1, foo2);
Run Code Online (Sandbox Code Playgroud)

当对象不同时,我得到预期的失败,

Expected: Foo
But was: Foo
Run Code Online (Sandbox Code Playgroud)

但错误消息不是很有帮助.我知道NUnit ToString用来显示错误信息,但我不能在这里覆盖它.

NUnit是否提供API来覆盖此行为,以便我可以提供自己的ToString实现?我在API Assert.AreEqualAssert.ThatAPI 上看不到任何东西

Cha*_*lie 8

您可以为任何类型添加特定格式代码,NUnit将使用它.请参阅https://github.com/nunit/docs/wiki/TestContext#addformatter

此功能已在NUnit 3.2中添加.

  • 所以你这样做:`TestContext.AddFormatter(obj => {if(obj == null){return"";} var foo = obj as Foo; if(foo == null){return obj.ToString();//*在这里构建foo的字符串表示并返回它*/});`我赞成你的答案,但你可以提供一个例子作为链接的补充. (3认同)