我有一个正在单元测试的 Android 应用程序。我有 4 个测试类,每个测试类都有多种测试方法。我从测试套件中同时运行它们。我在模拟器上遇到了一个问题,测试会在运行测试的过程中卡住。我改用实际设备,问题就消失了。
快进几周后,我在设备上运行测试时没有遇到同样的问题。过去几天我一直在 Google 上尝试寻找解决方案,但没有找到任何帮助。
问题
当我尝试运行所有测试时,测试最终会卡住。我所说的卡住是指测试本身卡住。我看到一种解决方案,可能是电话或 eclipse 。我重新启动了手机,更新了 eclipse 中的所有内容,包括 eclipse 本身。我尝试更改 View 以查看 eclipse View 是否不刷新,但这些都没有帮助。我还尝试使用 junit v4 库而不是 v3。
如果我单独运行测试方法,它们都会运行并通过。只有当我从测试套件中运行它们时,它们才会失败。
日志
我检查了日志,这就是我得到的:
03-13 12:11:04.526:I/TestRunner(23175):开始:testCheckShowDialogEnabled(com.package.name.MainActivityTest)
此后日志中就没有其他内容了。
在设备上
该应用程序已完成并从屏幕上删除。它不会在下一次测试开始时再次重新打开。
代码
这是我认为可能相关的代码。如果您需要更多代码,请告诉我。
public class AllTests extends TestSuite {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(MainActivityTest.class);
suite.addTestSuite(DatabaseHandlerTest.class);
suite.addTestSuite(ClassOneTest.class);
suite.addTestSuite(AnotherActivityTest.class);
return suite;
}
}
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
public MainActivityTest() {
super("com.package.name", MainActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
mMainActivity = getActivity();
mSolo = new Solo(getInstrumentation(), mMainActivity);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
mMainActivity = null;
}
// all the test methods
}
我的所有测试类都类似地实现 setup()
和 tearDown()
。
有人知道为什么我的测试一直卡住吗?非常感谢任何帮助或建议。
最佳答案
@smk 为我指明了寻找解决方案的方向。我刚刚将我的 tearDown()
更改为:
@Override
protected void tearDown() throws Exception {
mSolo.finishOpenActivities();
super.tearDown();
}
现在效果很好!
关于Android Junit 测试卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392461/