2016-02-14 81 views
0

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

回答

2

如果所讨论的类或者实现了自定义Equals(),其作用适当地,或者如果它是一个结构(Equals()做了场逐场默认比较)或匿名类型(Equals()做了属性逐特性比较),那么你可以断言他们在一个断言中是相等的。

虽然这将是一个坏主意,在复制和平等操作中都可能存在相关的错误,这意味着两者都失败了,以至于似乎证实另一方已经工作。

这是更好的有多个断言,如果没有多个测试。

而在实际的代码的方便“查了一堆不同的东西都等于”可能是得心应手,在测试中你不希望有一个“检查一堆不同的东西都是平等的”;你需要一个清晰的“确认姓名相同”,然后清晰地确认“确认年龄是否相等”等等,不仅仅是作为一种测试,而是作为测试的明确标志,并且暗示你期望的工作(有时单元测试比为新项目开发人员编写文档要好,他们说什么应该如何工作)。

如果你发现你在许多测试中对多个属性进行同样的检查,那么在测试中本身添加一个AssertAllPropertiesEqual()方法,但在那里有更多明显和公然的多个断言。

1

不,如果不使用反射。即使有反思,我也不会推荐这种方法。单元测试应该比简洁易读易读。只需使用多个断言。

另外,还要看看xUnit tests来看看他们是如何实现的东西。

+1

如果有的话,很多时候应该有多个测试,没关系多个断言。 –

0

此外,我最近开始使用XBehave它使用小黄瓜符号:鉴于...当...那么...

,延续的xUnit,并允许断言是否应非常有用,例如Name.ShouldEqual()。

非常可读。

几个断言应与可读性帮助,不要试图在不提供一个清晰的增益细节优化。