繁体   English   中英

Testng测试带有消息的特定异常

[英]Testng test for specific exception with message

我正在尝试测试一种方法是否在其消息中抛出特定异常,如下所示:

@DataProvider(name = "correctPairs")
public Object[][] expectedResultsTest() {
return new Object[][] {
 { null, new NullPointerException("Class cannot be null") },
};
}

@Test(dataProvider = "correctPairs")
public void ormDefinitionClassTest(final Class<?> value, final Throwable e) {
try {
    DatabaseManager databaseManager = new DatabaseManager();
    databaseManager.findAll(value);
} catch (Throwable ex) {

    Assert.assertEquals(ex, e);    
}

但是它失败了,但有一个例外:

 java.lang.AssertionError: expected [java.lang.NullPointerException: Class cannot be null] but found [java.lang.NullPointerException: Class cannot be null]

如何通过使用@DataProvider检查异常是否相等?

我将使用来自AssertJ流畅断言的catchThrowable方法。 这样,您可以检查测试正文中的异常,例如

Throwable t = catchThrowable(() -> databaseManager.findAll(value));
assertThat(t).isInstanceOf(e);

编辑:这里的问题可能是您假设这两个异常对象相等,但它们不是相等的对象。 您可以做的是分别声明它们的类型和消息。

您的错误在于平等测试。

Assert.assertEquals(new NullPointerException(), new NullPointerException());

返回false,因为两个异常的实例不同。 您必须先比较类,然后再比较消息。

    class A implements ThrowingRunnable{


        @Override
        public void run() throws AuthenticationFailedException{
            spy.processAuthenticationResponse(mockRequest, mockResponse, authenticationContext);
        }
    }
    assertThrows(AuthenticationFailedException.class,new A());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM