单元测试断言的目的不是简单的真值测试

时间:2012-10-22 13:48:59

标签: unit-testing

除了xUnit的Assert.True之类的基本断言之外,我无法理解其他断言可以提供什么。在我们的单元测试中使用其他类型的断言有什么好处?

4 个答案:

答案 0 :(得分:4)

在JUnit中,我更喜欢使用Hamcrest(assertThat)进行所有匹配。我觉得它提供了更可读的断言。有大量可用的匹配器,错误消息提供更多信息。

例如,假设您有List<String>。在assertTrue中可能是:

assertTrue(myList.size() == 3);

expected true, got false的错误消息。与Hamcrest相比,

assertThat(myList, IsCollectionWithSize.hasSize(3));

或使用静态导入

 assertThat(myList, hasSize(3));
 assertThat(myList, containsInOrder("first", "second"));

此错误消息为expected collection with size 3, got list["blah", "blah" ...]

还有其他匹配器,例如containsStringIsIterableContainingInOrderIsIterableContainingInAnyOrder等等。

Hamcrest

答案 1 :(得分:2)

主要是为了可读性。 例如:

StringAssert.StartsWith('abc', s);

可能比:

更具可读性
Assert.True(s.StartsWith('abc'))

有些断言虽然做了其他有用的东西,比如Assert.Fail();

答案 2 :(得分:1)

我猜它提供了一些可读性。 Assert.IsNotNull(obj)在眼睛上比Assert.True(obj!= null)更容易

答案 3 :(得分:0)

为了便于阅读。测试应该是您的代码的文档。

尽可能使用fest assert和普通的assertXXX,没有任何表达式。如果不可能(或需要大量使用谓词)我使用hamcrest。使用带有assertXXX的复杂表达式是我的最后选择