单位测试的目的主张了简单的真实测试



我无法理解其他断言可以提供的东西,而不是Xunit的Assert.True提供的基本断言。在我们的单位测试中使用其他类型的断言的优点是什么?

在junit中,我更喜欢使用hamcrest(断言)进行所有匹配。我觉得这给出了更可读的断言。有很多可用的匹配器,错误消息更具信息性。

例如,假设您有一个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

主要用于可读性。例如:

StringAssert.StartsWith('abc', s);

可能比:

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

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

我想它提供了一些可读性。assert.isnotnull(obj)在眼睛上比assert.true(obj!= null)

更容易

可读性。测试应为您的代码文档。

尽可能,我将fest断言与普通的旧assertxxx无需任何表达方式。如果不可能(或需要与谓词进行太多工作),我使用hamcrest。使用AssertXxx使用复杂表达式是我的最后手段

最新更新