2013-03-13 160 views
2

我有一个Android应用程序,我正在进行单元测试。我有4个测试类,每个测试类都有多种测试方法。我从一个测试套件同时运行它们。我在模拟器上遇到了一个问题,在运行测试的过程中,测试会冻结。我切换到使用实际设备,问题就消失了。Android Junit测试冻结

快进了几个星期,我在我的设备上运行测试时没有遇到同样的问题。过去几天,我一直在Google上寻找解决方案,但没有发现任何帮助。

的问题
当我尝试运行所有测试的测试最终会冻结。冻结我的意思是测试本身冻结。我看到一个解决方案,它可能是电话或日食。我重新启动了手机,更新了eclipse中的所有内容,包括eclipse本身。我试图改变看法,看看也许日食视图不刷新,但没有任何帮助。我也尝试使用junit v4库而不是v3。

如果我单独运行测试方法,它们都会运行并通过。只有当我从测试套件中运行它们时,它们才会失败。

日志
我查了日志,这就是我得到:
03-13 12:11:04.526: I/TestRunner(23175): started: 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()类似。

任何人都知道为什么我的测试保持冻结?任何帮助或建议非常感谢。

+0

看看这个https://groups.google.com/forum/?fromgroups=#!topic/robotium-developers/5i3YoyYFpWE – smk 2013-03-13 17:41:58

+0

我在我的tearDown()中试过这个,现在eclipse中的JUnit视图出现仍然在第二个测试方法被冻结。但是现在在大约一秒的时间内,我得到了一个开始的测试,完成了测试,并通过了所有测试方法的测试日志条目。 – 2013-03-13 19:31:53

+0

如果测试真的可以很快运行,我可以相信日志,但是我从来没有让这些测试快速运行。通常完成它们需要几分钟的时间 – 2013-03-13 19:34:04

回答

3

@smk指出我找到解决方案。我只是改变了我的tearDown()这样:

@Override 
protected void tearDown() throws Exception { 
    mSolo.finishOpenActivities(); 
    super.tearDown(); 
} 

现在,它的伟大工程!