【问题标题】:Testing for same exception using multiple parameters under same test method in JUnit 4在 JUnit 4 的相同测试方法下使用多个参数测试相同的异常
【发布时间】:2019-02-09 18:06:25
【问题描述】:

我有一个检查空参数的方法,如果有空参数,则抛出IllegalStateException

public V put(K key, V value)
{
    if (key == null || value == null) {
        throw new IllegalStateException();
    }
.....
}

在 JUnit4 中,我创建了三种独立的测试方法来涵盖所有可能性:put(key, null)put(null, value)put(null, null)

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException1() {
    llmm.put("A", null);
}

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException2() {
    llmm.put(null, 1);
}

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException3() {
    llmm.put(null, null);
}

它按预期工作,但问题是它相当乏味和冗长。如果我尝试将它们归为这样的一种方法,那么 Eclipse 会告诉我我遗漏了一些报道:

@Test(expected = IllegalStateException.class)
public void testPutThrowsIllegalStateException1() {
    llmm.put("A", null);
    llmm.put(null, 1);
    llmm.put(null, null);

有没有更快的方法可以将所有 3 个测试方法组合为 1 个测试方法?

【问题讨论】:

    标签: java exception junit junit4


    【解决方案1】:

    您的唯一测试在其第一行执行后立即失败,因此其他两个永远不会执行。

    进行 3 次(或仅 2 次)测试即可。

    另一种方法是避免使用expected 属性,而是使用良好的断言库(或自己创建这样的断言)。

    例如,使用AssertJ,您可以这样编写测试:

    @Test
    public void testPutThrowsIllegalStateException() {
        assertThatIllegalArgumentException().isThrownBy(() -> llmm.put("A", null));
        assertThatIllegalArgumentException().isThrownBy(() -> llmm.put(null, 1));
        assertThatIllegalArgumentException().isThrownBy(() -> llmm.put(null, null));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 2014-02-19
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多