在android中测试对象的最佳实践。我应该在测试中实例化类吗?

时间:2015-09-16 13:35:29

标签: android unit-testing robolectric dagger-2

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类的不同方式真的很感激它!

1 个答案:

答案 0 :(得分:0)

你真的需要在你的类ErrorChecker中传递上下文吗?我认为ErrorChecker应该只验证您的数据是否正确。如果数据不正确,您的视图应负责获取和显示消息。