2015-09-16 29 views
0

Iam當前正在嘗試在Android中測試應用程序。我使用Dagger 2作爲DI。我目前有一個名爲「ErrorChecker」的類,我用它來檢查電子郵件是否是有效格式,並且密碼是一定長度的。在android中測試對象的最佳做法。我應該在測試中實例化類嗎?

在我的ErrorChecker類中是我注入的上下文。如果輸入的電子郵件格式不正確,這基本上只用於獲取帶有警告的字符串資源。我喜歡能夠將上下文注入到我測試中的ErrorChecker類的版本中。我不確定這是否絕對必要?下面是我的測試課。

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class) 
public class ErrCheckerTest { 


private ErrorChecker errchecker; 

@Before 
public void setup() 
{ 
    errchecker = new ErrorChecker(); 
    errchecker.setCont(MyApplication.getInst()); 
} 



@Test 
public void validEmailTest() 
{ 
    //invalid emails 

    errchecker.setEmail("notvalidemail"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail("jimm.***@yahoo.com.com"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail(".*%&[email protected]"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail(""); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertFalse(errchecker.emailValid()); 


    // valid emails 

    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 

    } 
} 

本質上我只是實例化類而不是注入它。我也在我的ErrorChecker類中創建了一個方法,這樣我就可以設置上下文。然後使用MyApplication.getInst()將MyApplication的靜態實例傳遞給它,該實例擴展了Application類。我想知道這是一個好方法來創建我的ErrorChecker類的上下文,或者我應該嘗試注入它。這將需要大量額外的樣板代碼,但可能看起來更乾淨。編號喜歡遵循最佳做法,所以如果任何人都可以告訴我,如果這種方法違反了最佳做法,或者可以建議在我的Test ID中創建ErrorChecker類的不同方式,那麼真的很感激!

回答

0

你真的需要在你的類ErrorChecker中傳遞上下文嗎?我認爲ErrorChecker應該只驗證你的數據是否正確。如果數據不正確,您的視圖應該有責任獲取並顯示消息。

+0

耶你的權利。我在很多類中使用上下文來通常在我的Model類中設置錯誤消息。我試圖讓視圖類成爲一個「啞巴」的視圖,所以我試着讓它儘可能小的邏輯處理。因此我在模型中設置了錯誤(我從字符串資源中獲得)。我可以改變代碼,但Iam處理視圖中的非UI邏輯,這將違反MVP。無論如何,這是我的想法,但我始終對建議持開放態度。 –

+0

我的測試與我的主要不同,我的所有組件等。因爲我無法在我的主包中引用My Test類,所以我不能將我的Mocks注入到我的測試中。 –

+0

如何將上下文注入ErrorChecker。難道你不能將它注入到ErrorChecker的構造函數中,所以你可以在你的測試中使用模擬上下文。 –

相關問題