我试图测试一个方法是否抛出一个特定的异常与它的消息,如下所示:
@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,因为两个异常的实例不相同。您必须比较类,然后比较消息。