如何断言" N"在这个单元测试中抛出异常?

时间:2016-12-07 07:54:05

标签: java unit-testing tdd testng

我已经进行了以下单元测试,其工作差不多

@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,所以它会在第一次迭代中停止;它会启动异常,但不会继续检查其他密码。我怎样才能让它们全部测试?感谢

1 个答案:

答案 0 :(得分: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);
}