public class EmailValidator implements Validator {
public void validate(FacesContext context, UIComponent arg1, Object value)
throws ValidatorException {
String email = (String) value;
if (!email.contains("@")) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary(" Email is not valid.");
message.setDetail(" Email is not valid.");
context.addMessage("userForm:Email", message);
throw new ValidatorException(message);
}
}
}
質問する
2611 次
1 に答える
5
ここで何をテストしたいですか?働いている場合if (!email.contains("@"))
は?これをユーザーの観点からテストする場合は、Seleniumなどとの統合またはGUIテストを行う必要があります。
電子メール検証の単体テストが必要な場合は、クラスでこれを行います。
public class EmailValidator implements Validator {
public void validate(FacesContext context, UIComponent arg1, Object value)
throws ValidatorException {
String email = (String) value;
if (!isValidEmail(email)) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary(" Email is not valid.");
message.setDetail(" Email is not valid.");
context.addMessage("userForm:Email", message);
throw new ValidatorException(message);
}
}
boolean isValidEmail(String emailAddress){
// do your tests here...
}
}
次に、次のようなテストクラスを作成します。
public class EmailValidatorTest {
@Test
public testIsValidEmail(){
EmailValidator validator = new EmailValidator();
Assert.assertTrue(validator.isValidEmail("foo@bar.com");
Assert.assertFalse(validator.isValidEmail("aaa");
// more assertions here...
}
}
編集
そうですね、いわゆるモックオブジェクトを提供することで、そのメソッドのテストを書くことができます。次に、指定された電子メールアドレスが無効な場合に例外が発生することを期待します。
public class EmailValidatorTest{
@Test
public void testValidateWithValidAddresses(){
FacesContextMock facesContextMock = new FacesContextMock();
EmailValidator validator = new EmailValidator();
validator.validate(facesContextMock, null, "foo@bar.com");
}
@Test(expected=ValidatorException.class)
public void testValidateWithInvalidAddresses(){
FacesContextMock facesContextMock = new FacesContextMock();
EmailValidator validator = new EmailValidator();
validator.validate(facesContextMock, null, "foo");
}
}
FacesContextMockは、何もせずにFacesContextメソッドを実装する単なるモックアップです。
public class FacesContextMock extends FacesContext{
@Override
public Application getApplication(){
return null;
}
// all the abstract methods implemented here, just doing nothing
}
とはいえ、100%のコードカバレッジに近づけるためだけに、すべてのテストケースを作成する必要はないと思います。何をテストする必要があり、どの程度のコードカバレッジが必要かについては、https://sqa.stackexchange.com/で詳しく説明されていると思います。
于 2012-07-23T10:33:12.973 に答える