我有一个常规的JUnit测试用例来测试非android方法逻辑。该方法将TextUtils用于TextUtils.isEmpty()。
之类的东西让我成为AndroidTestCase只是为了引入TextUtils类是没有意义的。有没有更好的方法来测试这个单元测试?比如将android.jar添加到测试项目中还是什么?
与我想要模拟Context对象的另一个测试类似的情况。我不能在不扩展AndroidTestCase的情况下嘲笑它。在这些情况下,我只是尝试测试非Android逻辑并且不希望它在模拟器上运行,但它触及一些android类的最佳实践是什么?
谢谢
答案 0 :(得分:5)
您可以通过两种方式为Android代码运行测试。首先是仪表化测试选项,您可以通过将adb连接到系统来测试代码。
第二种更实用的方法是JUnit Testing,只测试你的Java类,并且模拟所有其他与Android相关的东西。
使用PowerMockito
在类名上方添加此项,并包含任何其他CUT类名(测试中的类)
@RunWith(PowerMockRunner.class)
@PrepareForTest({TextUtils.class})
public class ContactUtilsTest
{
将此添加到您的@Before
@Before
public void setup(){
PowerMockito.mockStatic(TextUtils.class);
mMyFragmentPresenter=new MyFragmentPresenterImpl();
}
这将使PowerMockito返回TextUtils
中方法的默认值例如,让我们说你的实现正在检查字符串是否为空,然后在@Test
中when(TextUtils.isEmpty(any(CharSequence.class))).thenReturn(true);
//Here i call the method which uses TextUtils and check if it is returning true
assertTrue(MyFragmentPresenterImpl.checkUsingTextUtils("Fragment");
您还必须添加相关的gradle依赖项
testCompile "org.powermock:powermock-module-junit4:1.6.2"
testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"
testCompile "org.powermock:powermock-api-mockito:1.6.2"
testCompile "org.powermock:powermock-classloading-xstream:1.6.2"
答案 1 :(得分:3)
它模拟了大部分Android SDK,因此测试可以在纯Java中运行。这意味着它们可以在常规桌面VM中更快地运行。
凭借这种速度,测试驱动的开发成为可能。