在xUnit中是否有办法仅在特定属性上断言?
对于给定的实用程序类方法
public static CopyStuff(Oder o1, Order o2)
{
o1.Name = o2.Name;
o1.Age = o2.Age;
...
}
是否有办法仅在这两个或更多属性上断言?而不是写多个断言?
我想
// Something like this
Assert(result, o2, [Name, Age, Blah..])
答案 0 :(得分:2)
如果相关的类要么实现了一个适当的自定义Equals()
,要么它是一个结构(Equals()
默认情况下进行逐字段比较)或匿名类型({{ 1}}进行逐个属性的比较),然后你可以断言它们在一个断言中是相等的。
但这不是一个坏主意;复制和平等操作中可能存在相关的错误,这意味着两者都失败了,似乎确认了另一个有效。
如果没有多次测试,有多个断言要好得多。
在实际代码中,"检查一堆不同的东西的便利性是相等的"可能很方便,在测试中你不想要一个"检查一堆不同的东西是平等的#34 ;;你想要一个明确的"确认姓名是等于"然后是明确的"确认年龄相等"等等,不仅仅是作为一种测试,而是作为一个明确的指示,已经过测试,也暗示了你期望的工作(有时单元测试比书面文档更好地进入项目的新开发者,在什么他们说应该如何运作。
如果你发现你在许多测试中对多个属性进行同样的检查,那么在测试中自己添加一个Equals()
方法,但是那里的多个断言更加明显和明显。< / p>
答案 1 :(得分:1)
不,不是没有使用反射。即使有反思,我也不推荐这种方法。单元测试应该有利于可读性而不是简洁。只需使用多个断言。
另外,请查看xUnit tests,看看它们是如何实现的。
答案 2 :(得分:1)
我最近也开始使用XBehave,它使用Gherkin表示法:给...当......然后......
非常有用,因为它扩展了XUnit并允许断言,例如Name.ShouldEqual()。
非常易读。
有几个断言应该有助于提高可读性,不要试图优化不能提供明显收益的细节。
答案 3 :(得分:0)
不是,您必须具有一个按属性进行的测试(每个测试一个断言),这是一种方法来弄清楚如果出现问题,该怎么办。 例如,如果您有一个名为When_CopyStuff_Is_Called_Then_It_Must_Sets_Right_Name()的测试,很容易理解该错误,而不是所有属性
当您需要测试Api模型时,这非常有用。