我有以下单元测试,它几乎工作得很好:
@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);
}
关于java - 如何断言此单元测试中已引发 "N"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41012063/