一个断言语句测试了几个条件

时间:2016-06-07 01:04:56

标签: java unit-testing integration-testing

我发现很多关于在一种方法中使用多个断言的错误做法的信息(一种测试条件)。很清楚。每种方法都应该测试一个且只有一个条件。所以在大多数情况下它应该是一个断言。

但如果我的一个断言测试了几个条件,我无法找到有关最佳做法的信息。

示例:

@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_returnsAllUniquePerformersfindAllPerformers_returnsEachPerformerOnlyOnce。但后来我意识到我的第一种方法也测试了这两个条件!

那么,我该怎么办?

  1. 保留所有方法。
  2. 删除其他2个测试方法并将我的findAllPerformers_returnsPerformersInAlphabeticalOrder方法重命名为包含所有三个条件的非常长的名称(因为它确实测试了所有这三个条件!)
  3. 只需删除其他2种测试方法。
  4. 保留所有方法,但从另外两种方法调用findAllPerformers_returnsPerformersInAlphabeticalOrder方法。
  5. findAllPerformers_returnsPerformersInAlphabeticalOrder方法内容复制粘贴到另外两种方法。
  6. 还有别的......

1 个答案:

答案 0 :(得分:0)

如果此测试失败,那么查看失败测试的人最初会看到findAllPerformers_returnsPerformersInAlphabeticalOrder()。 单独看一下,看来测试中的方法返回的列表不是按字母顺序排列的,而不是列表中没有包含'Bart Simpson'。

避免使用选项4和5,它们并没有真正解决任何问题,并且会增加重复/维护而没有任何附加值(因为测试将因测试名称中未提及的原因而失败)。而是试图找到一种方法来实际测试你想要的断言。