首页 > 解决方案 > 如何编写Junit测试来测试方法是否正确抛出异常?

问题描述

当名称为空时,如何测试以下方法是否抛出异常?

public boolean validateName(String name) {
    if (name == null) {
        throw new IllegalArgumentException("Name cannot be null");
    }
    if (name.isBlank()) { // checks if name is entirely whitespace
        return false;
    }
    if (!name.contains(" ")) {
        return false;
    }
    return true;
}

我已经测试了空白名称和包含空格的名称的所有情况,唯一剩下的就是名称为空时的测试,这就是我得到的:

@Test
public void handlesNullTest() {
    String name = null;
    NameValidator validator;
    assertEquals("Name cannot be null", validator.validateName(name));
    
}

以上是在java Junit测试中测试抛出异常的正确方法吗?谢谢你。

标签: javaunit-testingjunit

解决方案


使用 Junit 4,您可以将属性用作 @Test 注释的属性来“预期”某个异常,如下所示:

@Test(expected = IllegalArgumentException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
  String name = null;
  NameValidator validator;
  validator.validateName(name);
}

推荐阅读