android - 多次运行 JUnit 测试会给出不同的结果

标签 android debugging testing

我的应用程序有一个测试用例,它填充 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/

相关文章:

java - JUnit 和 Clojure 单元测试

android - 在滚动的 recyclerview cardview 进入一页

Android:不同型号的原始固件识别字符串

debugging - 什么可以帮助您提高发现错误的能力?

android - 是否可以同时调试 UI App 和 AAR?

c++ - py.test 与非 python 测试(具体来说,与 cxxtest)

android - 在内存不足的情况下让 AsyncTask 保持 Activity 状态?

android - 在平板电脑上锁定横向 + 当设备处于纵向时开始 Activity = 屏幕上可见旋转

c# - 用于生成对象初始化代码的调试器可视化器

json - Laravel 5 PHPUnit 测试 json 后