xUnit断言多个属性

时间:2016-02-14 01:26:10

标签: c# .net xunit

在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..]) 

4 个答案:

答案 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模型时,这非常有用。