xUnit 断言多个属性
xUnit assert multiple properties
在 xUnit 中有没有办法只断言特定的属性?
对于给定的实用程序 class 方法
public static CopyStuff(Oder o1, Order o2)
{
o1.Name = o2.Name;
o1.Age = o2.Age;
...
}
有没有办法只对这两个或更多属性断言?而不是编写多个断言?
我愿意
// Something like this
Assert(result, o2, [Name, Age, Blah..])
不,不是没有使用反射。即使有反思,我也不推荐这种方法。单元测试应该有利于可读性而不是简洁。只需使用多个断言。
另外,看看 xUnit tests 看看他们是如何实现的。
如果有问题的 class 实现了一个适当行为的自定义 Equals()
,或者如果它是一个结构(Equals()
默认情况下进行逐字段比较)或匿名类型(Equals()
进行 属性-by-属性 比较),那么您可以断言它们在单个断言中相等。
虽然这不是个好主意;复制和相等操作中可能存在一个相关的错误,这意味着两者都以一种似乎确认另一个有效的方式失败。
如果不是多个测试,最好有多个断言。
虽然在实际代码中 "check a bunch of different things are each equal" 的便利性可能很方便,但在测试中您不需要 "check a bunch of different things are equal";你想要一个清晰的 "confirm Name is equal" 后跟一个清晰的 "confirm Age is equal" 等等,这不仅是一种测试,而且是对已测试内容的明确指示以及暗示你期望工作的内容(有时对于新开发人员来说,单元测试比书面文档更好,因为他们说的应该如何工作)。
如果您发现您在许多测试中对多个属性进行相同的检查,则将一个 AssertAllPropertiesEqual()
方法添加到测试本身中,但其中包含多个断言,在那里更加明显和明目张胆.
我最近也开始使用 XBehave,它使用 Gherkin 表示法:给定...当...然后...
非常有用,因为它扩展了 XUnit 并允许 Should 断言,例如 Name.ShouldEqual()。
非常可读。
几个断言应该有助于提高可读性,不要尝试优化不能提供明显增益的细节。
不,您必须通过 属性 进行测试(每次测试一个断言),这是在出现问题时弄清楚发生了什么的方法。
例如,如果您有一个名为 When_CopyStuff_Is_Called_Then_It_Must_Sets_Right_Name() 的测试,则可以非常清楚地理解错误,而不是所有属性
这在您需要测试 Api 模型时非常有用。
在 xUnit 中有没有办法只断言特定的属性?
对于给定的实用程序 class 方法
public static CopyStuff(Oder o1, Order o2)
{
o1.Name = o2.Name;
o1.Age = o2.Age;
...
}
有没有办法只对这两个或更多属性断言?而不是编写多个断言?
我愿意
// Something like this
Assert(result, o2, [Name, Age, Blah..])
不,不是没有使用反射。即使有反思,我也不推荐这种方法。单元测试应该有利于可读性而不是简洁。只需使用多个断言。
另外,看看 xUnit tests 看看他们是如何实现的。
如果有问题的 class 实现了一个适当行为的自定义 Equals()
,或者如果它是一个结构(Equals()
默认情况下进行逐字段比较)或匿名类型(Equals()
进行 属性-by-属性 比较),那么您可以断言它们在单个断言中相等。
虽然这不是个好主意;复制和相等操作中可能存在一个相关的错误,这意味着两者都以一种似乎确认另一个有效的方式失败。
如果不是多个测试,最好有多个断言。
虽然在实际代码中 "check a bunch of different things are each equal" 的便利性可能很方便,但在测试中您不需要 "check a bunch of different things are equal";你想要一个清晰的 "confirm Name is equal" 后跟一个清晰的 "confirm Age is equal" 等等,这不仅是一种测试,而且是对已测试内容的明确指示以及暗示你期望工作的内容(有时对于新开发人员来说,单元测试比书面文档更好,因为他们说的应该如何工作)。
如果您发现您在许多测试中对多个属性进行相同的检查,则将一个 AssertAllPropertiesEqual()
方法添加到测试本身中,但其中包含多个断言,在那里更加明显和明目张胆.
我最近也开始使用 XBehave,它使用 Gherkin 表示法:给定...当...然后...
非常有用,因为它扩展了 XUnit 并允许 Should 断言,例如 Name.ShouldEqual()。
非常可读。
几个断言应该有助于提高可读性,不要尝试优化不能提供明显增益的细节。
不,您必须通过 属性 进行测试(每次测试一个断言),这是在出现问题时弄清楚发生了什么的方法。 例如,如果您有一个名为 When_CopyStuff_Is_Called_Then_It_Must_Sets_Right_Name() 的测试,则可以非常清楚地理解错误,而不是所有属性
这在您需要测试 Api 模型时非常有用。