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的构造函数中,所以你可以在你的测试中使用模拟上下文。 –