我的应用程序有一个测试用例,它填充 Activity 中的 TextView
,然后模拟单击将数据提交到数据库的Save
按钮。我使用不同的数据重复此操作几次,调用 Instrumentation.waitForIdleSync()
,然后检查插入的数据是否确实在数据库中。我最近连续运行了这个测试三次,没有更改或重新编译我的代码。每次的结果都不同:一个测试运行通过,另外两个测试运行报告数据库中缺少不同的数据项。什么可能导致这种行为?是否可能是由于竞争线程之间的某些竞争条件造成的?当每次运行结果都不同时,如何调试?
最佳答案
看起来像是竞争条件。 请记住,在线程世界中,无法确保运行时顺序。
我不是 Android 开发人员,所以我只是推测,但 UI 通常只在一个事件线程上,所以当你从另一个线程(你的测试)调用该方法时,你可能会破坏它,因为你不在事件线程。
您可以尝试使用信号量或更可能使用资源锁定。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Lock.html http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html
关于android - 多次运行 JUnit 测试会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993474/