2

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

4

4 回答 4

4

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

例如,假设您有一个List<String>. 其中assertTrue可能是:

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

这个 if 的错误信息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, 等等等等。

汉克雷斯特

于 2012-10-22T13:54:49.547 回答
2

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

StringAssert.StartsWith('abc', s);

可能比以下更具可读性:

Assert.True(s.StartsWith('abc'))

一些断言虽然做了其他有用的事情,例如Assert.Fail();

于 2012-10-22T13:52:37.363 回答
1

我想它提供了一些可读性。Assert.IsNotNull(obj) 比 Assert.True(obj != null) 更容易看

于 2012-10-22T13:55:31.283 回答
0

for readability. tests should be the documentation of your code.

whenever possible i use fest assert with plain old assertXXX without any expressions. if not possible (or requires to much work with predicates) i use hamcrest. using complex expressions with assertXXX is the last resort for me

于 2012-10-22T18:21:51.393 回答