2012-07-23 35 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

相關問題