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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何测试该方法不会抛出异常?相关的知识,希望对你有一定的参考价值。

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

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

}

如果成功是在方法没有抛出异常时怎么办?这有属性吗?

答案

如果从测试方法中抛出异常,则认为测试处于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();
    }
}
另一答案

不抛出异常并且同时没有预料到它总是成功但是如果你明确希望你的测试告诉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);
}

以上是关于如何测试该方法不会抛出异常?的主要内容,如果未能解决你的问题,请参考以下文章

测试期间的Spring Boot JPA事务 - 不会在插入时抛出密钥违例异常

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

为什么groovy方法不打印该文件不存在?

Java:抛出异常后如何终止执行后面的代码?

关于java异常抛出与返回值

Java:抛出异常后如何终止执行后面的代码?