2012-07-23 92 views
2
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); 

     } 
    } 

} 

回答

5

什么在这里做你想做的测试呢?如果if (!email.contains("@"))正在工作?如果您想从用户的角度对此进行测试,那么您想要进行集成或GUI测试,例如Selenium

如果你想为你的电子邮件验证一个单元测试,我会在课堂上做到这一点:

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("[email protected]"); 
    Assert.assertFalse(validator.isValidEmail("aaa"); 
    // more assertions here... 

    } 
} 

编辑

好了,你可以通过提供所谓的Mock objects编写该方法的测试。然后你只指望一个异常发生时所提供的电子邮件地址无效:

public class EmailValidatorTest{ 

    @Test 
    public void testValidateWithValidAddresses(){ 
    FacesContextMock facesContextMock = new FacesContextMock(); 
    EmailValidator validator = new EmailValidator(); 
    validator.validate(facesContextMock, null, "[email protected]"); 
    } 

    @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/

+0

其实我写的一样,但我的代码覆盖报告显示,这种方法还需要进行测试的讨论。我正在做JUNIT测试第一次,让我卡在这里? 感谢您的答复。 – Kshitij 2012-07-23 11:02:26

+0

@ user1539930我更新我的回答和表现方式如何测试validate方法。 – 2012-07-23 11:54:12

+0

嘿感谢蒂姆:) :) – Kshitij 2012-07-23 13:16:32

相关问题