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類的不同方式,那麼真的很感激!
耶你的權利。我在很多類中使用上下文來通常在我的Model類中設置錯誤消息。我試圖讓視圖類成爲一個「啞巴」的視圖,所以我試着讓它儘可能小的邏輯處理。因此我在模型中設置了錯誤(我從字符串資源中獲得)。我可以改變代碼,但Iam處理視圖中的非UI邏輯,這將違反MVP。無論如何,這是我的想法,但我始終對建議持開放態度。 –
我的測試與我的主要不同,我的所有組件等。因爲我無法在我的主包中引用My Test類,所以我不能將我的Mocks注入到我的測試中。 –
如何將上下文注入ErrorChecker。難道你不能將它注入到ErrorChecker的構造函數中,所以你可以在你的測試中使用模擬上下文。 –