谷歌最近发布了Android测试支持库1.0。读完后overview https://android-developers.googleblog.com/2017/07/android-testing-support-library-10-is.html,我对 Android Test Orchestrator 有点困惑。
It said
通常,AndroidJUnitRunner 在同一检测进程中运行所有测试,这可能会导致许多问题。
您能解释一下使用相同的仪器流程会导致哪些类型的问题吗?
如果一个测试崩溃,它会阻止测试套件的其余部分运行
根据我的经验,一次测试崩溃不会阻止其他测试用例的运行。请指出我在这里误解了什么?
并从Android 测试 Orchestrator 开发人员指南 https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator,
为了完整起见,Android Test Orchestrator 在每次测试后都会运行 pm clear。
因此 Android Test Orchestrator 将运行pm 清除 [test_package_name]每次测试后,对吗?
通过我的测试,pm 清除 [app_package_name]每次测试后不会执行。这意味着被测应用程序的数据不会被清除。因此测试用例可能仍然相互依赖。例如:
- 测试用例 A 存储 SharedPreference 键值
- 在测试用例 A 之后运行的测试用例 B 可以读取测试用例 A 存储的值
总的来说,经过一番尝试,我没有发现Android Test Orchestrator有任何优势。有人可以帮助解决我的困惑吗?谢谢。
经过对这个问题的一些研究后,我可以提供以下答案:
通常,AndroidJUnitRunner 在同一检测进程中运行所有测试,这可能会导致许多问题。
如前所述,AndroidJUnitRunner 在相同的检测进程上运行,因此基本上您的测试是全状态运行的,如果您的测试对进程状态有某种依赖性,这可能会造成严重破坏。在 Android 测试编排器中,每个测试都在自己的进程中运行,因此依赖性不是问题。
如果一个测试崩溃,它会阻止测试套件的其余部分运行
这里讨论的崩溃是进程的崩溃,而不是活动/应用程序的崩溃。您可以通过插入一个测试来测试这一点System.exit(0);
通常,这将停止整个测试运行,而在 Android 测试协调器中测试将按预期继续。
为了完整起见,Android Test Orchestrator 在每次测试后都会运行 pm clear。
这是谷歌的疏忽,已从官方文档 https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator可以观察到here https://groups.google.com/forum/#!topic/android-testing-support-library/VUT97mrwWQY.
基本上,使用 Android 测试编排器的优点在于每个测试都有单独的流程,从而提高稳定性并确保测试的完整执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)