【问题标题】:Testng test for specific exception with messageTestng 测试带有消息的特定异常
【发布时间】:2023-04-10 17:35:01
【问题描述】:

我正在尝试测试一个方法是否抛出一个特定的异常,它的消息如下:

@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 来检查异常的相等性?

【问题讨论】:

    标签: java testng


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      你的错误在于相等性测试。

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

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

      【讨论】:

        【解决方案3】:
            class A implements ThrowingRunnable{
        
        
                @Override
                public void run() throws AuthenticationFailedException{
                    spy.processAuthenticationResponse(mockRequest, mockResponse, authenticationContext);
                }
            }
            assertThrows(AuthenticationFailedException.class,new A());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-20
          • 2010-09-11
          • 1970-01-01
          • 2017-03-25
          • 1970-01-01
          相关资源
          最近更新 更多