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

How to assert "N" exceptions have been thrown in this unit test?

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

@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,所以第一次迭代就停止了;它启动异常但不继续检查其他密码。我怎样才能让它测试所有这些?谢谢

您必须将方法注释为 @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);
}