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

如果相关类实现了适当的自定义Equals(),或者它是结构(默认情况下Equals()进行逐字段比较(或匿名类型(Equals()进行逐个属性比较(,那么您可以断言它们在单个断言中是相等的。

不过,这将是一个坏主意;复制和相等操作中都可能存在一个相关的错误,这意味着两者都失败了,以至于一个似乎确认另一个已经工作。

如果不是多个测试,最好有多个断言。

虽然在实际代码中,"检查一堆不同的东西是否相等"的便利性可能很方便,但在测试中,你不希望"检查一堆不同的东西是否相等";你想要一个明确的"确认名称是相等的",然后是一个

明确的"确认年龄是相等的"等等,而不仅仅是一个测试, 但作为已经测试的内容的明确指示,并暗示您期望工作的内容(有时单元测试比对新开发人员的书面文档更好,他们说的东西应该如何工作(。

如果您发现在许多测试中对多个属性执行相同的检查,则将AssertAllPropertiesEqual()方法添加到测试本身中,但其中的多个断言更加明显和明显。

不,并非不使用反射。 即使有反思,我也不会推荐这种方法。 单元测试应该有利于可读性而不是简洁。 只需使用多个断言。

另外,看看

xUnit测试,看看它们是如何实现的。

我最近也开始使用使用小黄瓜表示法的XBehave:给定...什么时候。。。然后。。。

非常有用,因为它扩展了XUnit并允许Should断言,例如Name.ShouldEqual((。

非常可读。

几个断言应该有助于提高可读性,不要试图优化不能提供明显收益的细节。

不,您必须按属性进行测试(每个测试一个断言(,这是弄清楚如果出现问题会发生什么的方法。对于意图,如果您有一个名为 When_CopyStuff_Is_Called_Then_It_Must_Sets_Right_Name(( 的测试,则非常清楚地了解错误而不是所有属性

当您需要测试 API 模型时,这非常有用。

相关内容

  • 没有找到相关文章

最新更新