我发现很多关于在一种方法中使用多个断言的错误做法的信息(一种测试条件)。很清楚。每种方法都应该测试一个且只有一个条件。所以在大多数情况下它应该是一个断言。
但如果我的一个断言测试了几个条件,我无法找到有关最佳做法的信息。
示例:
@Test
public void findAllPerformers_returnsPerformersInAlphabeticalOrder() {
List<String> performers = reportRepository.findAllPerformers();
assertThat("Should return performers in alphabetical order",
performers, contains("Bart Simpson", "Homer Simpson",
"Ned Flanders", "Xena Warrior Princess"));
}
首先,我必须再增加2个测试方法(条件):findAllPerformers_returnsAllUniquePerformers
和findAllPerformers_returnsEachPerformerOnlyOnce
。但后来我意识到我的第一种方法也测试了这两个条件!
那么,我该怎么办?
findAllPerformers_returnsPerformersInAlphabeticalOrder
方法重命名为包含所有三个条件的非常长的名称(因为它确实测试了所有这三个条件!)findAllPerformers_returnsPerformersInAlphabeticalOrder
方法。findAllPerformers_returnsPerformersInAlphabeticalOrder
方法内容复制粘贴到另外两种方法。答案 0 :(得分:0)
如果此测试失败,那么查看失败测试的人最初会看到findAllPerformers_returnsPerformersInAlphabeticalOrder()
。
单独看一下,看来测试中的方法返回的列表不是按字母顺序排列的,而不是列表中没有包含'Bart Simpson'。
避免使用选项4和5,它们并没有真正解决任何问题,并且会增加重复/维护而没有任何附加值(因为测试将因测试名称中未提及的原因而失败)。而是试图找到一种方法来实际测试你想要的断言。