管理不同 JUnit 测试中的检查异常

gaz*_*ubi 4 java junit unit-testing junit4 checked-exceptions

我正在为我的方法之一编写 Java 单元测试。方法声明是这样的:

public int convertToInteger() throws InvalidRomanNumberException
{
    int result=0;
    BaseRomanNumeral num1, num2; 
    int i=0;
    if(!validOperation())
        throw new InvalidRomanNumberException();
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试编写两个单元测试。一是测试是否抛出了正确的异常。另一种是确保写入转换发生。这就是我的测试用例的样子

@Test
public void testRomanNumberConversion() {
    String romanValue="MCMII";
    RomanNumber num=new RomanNumber(romanValue);
    assertEquals(1903,num.convertToInteger());  
}

@Test(expected = InvalidRomanNumberException.class)
public void testInvalidRomanNumberExceptionThrown()  {
    String romanValue="MCMIIII";
    RomanNumber num=new RomanNumber(romanValue);
    num.convertToInteger(); 
}
Run Code Online (Sandbox Code Playgroud)

对于这两个测试用例,我收到一个错误,指出 Unhandled InvalidRomanNumberException。仅当我向每个方法定义添加 throws InvalidRomanNumberException 时,此问题才能解决。但我认为这不是正确的方法。只是想和你们其他人确认一下,这里的标准是什么?我应该如何解决这个未处理的异常消息

CKi*_*ing 5

由于它看起来像是InvalidRomanNumberException一个已检查的异常,因此您必须用 a 包围它try-catch或声明该方法throws InvalidRomanNumberException. JUnit或不,这是常态。

expect话虽如此,您将抛出的测试用例方法InvalidRomanNumberException理想情况下应该声明它是throws一个,因为没有必要用 a 抑制它,try-catch因为您的测试用例将会失败。另一方面,您期望不会抛出异常的测试用例方法可以在try-catch该方法周围使用convertToInteger,并且无论是否抛出异常,该测试用例都应该具有方法assert的预期结果convertToInteger

JUnit 测试用例的最终结果应该是测试通过还是失败。运行时的异常将表明两者都不是。JUnit 测试用例不得崩溃。