如何测试该方法不会抛出异常?

时间:2018-03-01 20:54:15

标签: java exception junit

当你期望目标方法抛出异常时,这就是你编写测试的方法。

@Test(expected = myExpectedException.class)
public void Test()
{

}

如果方法没有抛出异常,那该怎么办?那有属性吗?

2 个答案:

答案 0 :(得分:3)

如果从测试方法中抛出异常,则认为测试处于ERROR状态,并且不计入PASSED测试。 换句话说 - 您不需要任何特殊处理。只需调用您要测试的方法即可。

如果您想明确不允许例外,可以在测试中添加ExpectedException规则:

public class MyClassTest {
    // The class under test
    // Initialized here instead of in a @Before method for brevity
    private MyClass underTest = new MyClass();

    // Not really needed, just makes things more explicit
    @Rule
    public ExpectedException noExceptionAllowed = ExpectedException.none();

    @Test
    public void testSomeMethod() throws SomeException {
        // If an exception is thrown, the test errors out, and doesn't pass
        myClass.someMethod();
    }
}

答案 1 :(得分:1)

不抛出异常并且同时不期待它始终是成功的 但是,如果您明确希望您的测试告诉Spec该方法可能会抛出异常而不是这次您可能会使用类似的东西

在我的档案中找到此代码。我记得从互联网上引用它

class MyAssertionRules {
    public static void assertDoesNotThrow(FailableAction action) {
        try {
            action.run();
        } catch (Exception ex) {
            throw new Error("Unexpected Exception Thrown", ex);
        }
    }
}

@FunctionalInterface
interface FailableAction {
    void run() throws Exception;
}

然后你可以像这样运行你的测试

public void testMethodUnderTest() {
    MyAssertionRules.assertDoesNotThrow(serviceUnderTest::methodUnderTest);
}