【发布时间】:2015-09-16 13:35:28
【问题描述】:
我目前正在尝试在 android 中对应用程序进行单元测试。我将 Dagger 2 用于 DI。我目前有一个名为“ErrorChecker”的类,我用它来检查电子邮件是否具有有效格式以及密码是否具有特定长度等。
在我的 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(".*%&$$$$$.@fish.ie");
assertFalse(errchecker.emailValid());
errchecker.setEmail("");
assertFalse(errchecker.emailValid());
errchecker.setEmail("jimm.@yaaaaaa");
assertFalse(errchecker.emailValid());
// valid emails
errchecker.setEmail("eoin@yahoo.com");
assertTrue(errchecker.emailValid());
errchecker.setEmail("eoin@myemail.co.uk");
assertTrue(errchecker.emailValid());
errchecker.setEmail("paul.murphy@mygit.ie");
assertTrue(errchecker.emailValid());
errchecker.setEmail("karen.greene@hello.ie");
assertTrue(errchecker.emailValid());
errchecker.setEmail("orla@yahoo.ie");
assertTrue(errchecker.emailValid());
}
}
基本上我只是实例化类而不是注入它。我还在我的 ErrorChecker 类中创建了一个方法,以便我可以设置上下文。然后我使用 MyApplication.getInst() 将 MyApplication 的静态实例传递给它,它扩展了 Application 类。我想知道这是用上下文创建我的 ErrorChecker 类的好方法,还是我应该尝试注入它。这将需要大量额外的样板代码,但可能看起来更干净。我想遵循最佳实践,所以如果有人能告诉我这种方法是否违反了最佳实践,或者可以建议在我的测试 ID 中创建 ErrorChecker 类的不同方法,真的很感激!
【问题讨论】:
标签: android unit-testing robolectric dagger-2