我有以下单元测试, 几乎可以正常工作:
@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 ,所以它在第一次迭代中停止; 它会启动异常,但不会继续检查其他密码。 我怎样才能让它们全部测试? 谢谢
I've got the following unit test, which works almost fine:
@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}; }As you can see, it is just asserting that new LaxPasswordValidator(invalidPassword) works as expected and throws an exception.
Problem: It is just taking INVALID_PASSWORD_1 into account, so it stops in the first iteration; it launches the exception but does not continue checking the other passwords. How can I make it test them all? Thanks
最满意答案
您必须将方法注释为@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); }You must annotate the method as @DataProvider
@DataProvider(name = "invalid-passwords") public Object[][] getInvalidPasswords() { return new String[][]{ {"INVALID_PASSWORD_1"}, {"INVALID_PASSWORD_2"}, {"INVALID_PASSWORD_3"} }; }and annotate the @Test method to use this dataprovider for the parameters.
@Test(expectedExceptions = {IllegalArgumentException.class}, expectedExceptionsMessageRegExp = PasswordValidator.INVALID_PASSWORD, dataProvider = "invalid-passwords") public void testInvalidPasswords(String password) throws Exception { new LaxPasswordValidator(password); }更多推荐
发布评论