用消息测试特定异常的Testng

时间:2018-02-28 20:13:03

标签: java testng

我正在尝试测试一个方法是否会抛出一个特定的异常,如下所示:

// When I create a Person, it is transient
Person person = new Person();
person.setName("John");

// If I wanna use update, i will get an exception
session.update(person); // PersistenceException!

但它失败了例外:

@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);    
}

如何使用@DataProvider?

检查异常是否相等

3 个答案:

答案 0 :(得分:0)

我会使用来自AssertJ流畅断言的catchThrowable方法。这样你就可以检查测试体中的异常,比如

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

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

答案 1 :(得分:0)

你的错误在于平等测试。

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

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

答案 2 :(得分:0)

    class A implements ThrowingRunnable{


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