Iam目前正在尝试在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类的不同方式真的很感激它!
答案 0 :(得分:0)
你真的需要在你的类ErrorChecker中传递上下文吗?我认为ErrorChecker应该只验证您的数据是否正确。如果数据不正确,您的视图应负责获取和显示消息。