java - 如何断言此单元测试中已引发 "N"异常?

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

最佳答案

您必须将该方法注释为 @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/

相关文章:

javascript - 在 Angular 单元测试中验证 ng-pattern

android - 测试 Rx Java 间隔

Java RMI 通过互联网

java - 打印 Java 数组的最简单方法是什么?

用于 URL 的 java.nio.file.Path?

c++ - 您使用什么来对 C++ 代码进行单元测试?

testing - 如何在 webpack 中集成 karma

angular - karma 并行执行测试用例两次

java - 对文件存在的不同行为进行单元测试

java - 在可序列化对象上获取 NotSerializableException