除了xUnit的Assert.True
之类的基本断言之外,我无法理解其他断言可以提供什么。在我们的单元测试中使用其他类型的断言有什么好处?
答案 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" ...]
还有其他匹配器,例如containsString
,IsIterableContainingInOrder
,IsIterableContainingInAnyOrder
等等。
答案 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的复杂表达式是我的最后选择