2015-09-16 28 views
0

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

回答

0

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

+0

耶你的权利。我在很多类中使用上下文来通常在我的Model类中设置错误消息。我试图让视图类成为一个“哑巴”的视图,所以我试着让它尽可能小的逻辑处理。因此我在模型中设置了错误(我从字符串资源中获得)。我可以改变代码,但Iam处理视图中的非UI逻辑,这将违反MVP。无论如何,这是我的想法,但我始终对建议持开放态度。 –

+0

我的测试与我的主要不同,我的所有组件等。因为我无法在我的主包中引用My Test类,所以我不能将我的Mocks注入到我的测试中。 –

+0

如何将上下文注入ErrorChecker。难道你不能将它注入到ErrorChecker的构造函数中,所以你可以在你的测试中使用模拟上下文。 –

相关问题