【问题标题】:How to assert "N" exceptions have been thrown in this unit test?如何断言在这个单元测试中抛出了“N”个异常?
【发布时间】:2016-12-07 07:54:05
【问题描述】:

我进行了以下单元测试,几乎可以正常工作:

@Test(expectedExceptions = {IllegalArgumentException.class}, expectedExceptionsMessageRegExp =
        PasswordValidator.INVALID_PASSWORD)
public void testInvalidPasswordsThrowException() throws Exception {
    for (String invalidPassword: getInvalidPasswords()){
        new LaxPasswordValidator(invalidPassword);
    }
}

private String[] getInvalidPasswords() {
    return new String[] {INVALID_PASSWORD_1, INVALID_PASSWORD_2, INVALID_PASSWORD_3, INVALID_PASSWORD_4,
            INVALID_PASSWORD_5, INVALID_PASSWORD_6, INVALID_PASSWORD_7, INVALID_PASSWORD_8, INVALID_PASSWORD_9,
            INVALID_PASSWORD_10};
}

如您所见,它只是断言new LaxPasswordValidator(invalidPassword) 按预期工作并引发异常。

问题:它只是考虑到INVALID_PASSWORD_1,所以它在第一次迭代中停止;它启动异常但不继续检查其他密码。我怎样才能让它测试它们?谢谢

【问题讨论】:

    标签: java unit-testing tdd testng


    【解决方案1】:

    您必须将方法注释为@DataProvider

    @DataProvider(name = "invalid-passwords")
    public Object[][] getInvalidPasswords() {
        return new String[][]{
            {"INVALID_PASSWORD_1"},
            {"INVALID_PASSWORD_2"},
            {"INVALID_PASSWORD_3"}
        };
    }
    

    并注释 @Test 方法以将此数据提供程序用于参数。

    @Test(expectedExceptions = {IllegalArgumentException.class},
        expectedExceptionsMessageRegExp = PasswordValidator.INVALID_PASSWORD,
        dataProvider = "invalid-passwords")
    public void testInvalidPasswords(String password) throws Exception {
        new LaxPasswordValidator(password);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2015-11-19
      • 2019-09-03
      相关资源
      最近更新 更多