其他测试框架 Espresso - 尽量使用可以 root 的设备

非洲赵子龙 for 安卓Espresso菜刀队 · 2018年04月13日 · 1268 次阅读

今天在用 Espresso 做 Intent 测试时,发生了一个很奇怪的现象:
某个测试用例的所有步骤全部都跑完了,这个用例的统计结果依然为失败.
我在测试用例结尾打印了特制的 Log Tag,而 Tag 从最后运行时的日志来看,已经被打印出来了,可见中间未发生其他异常或断言失败的错误——因为前一句是

intended(expectedIntent);

这一句如果执行失败会抛出 AssertionFailedError 的错误而不会再打印出我的 Tag.
然后我回去详细看了所有 Log,发现了一个这玩意儿:

04-13 17:30:20.636 24663-24678/? E/OrchestrationXmlTestRunListener: Failed to generate report data
    java.io.IOException: Failed to prepare report directory.
        at android.support.test.orchestrator.listeners.OrchestrationXmlTestRunListener.createOutputResultStream(OrchestrationXmlTestRunListener.java:254)
        at android.support.test.orchestrator.listeners.OrchestrationXmlTestRunListener.generateDocument(OrchestrationXmlTestRunListener.java:192)
        at android.support.test.orchestrator.listeners.OrchestrationXmlTestRunListener.orchestrationRunFinished(OrchestrationXmlTestRunListener.java:177)
        at android.support.test.orchestrator.AndroidTestOrchestrator.finish(AndroidTestOrchestrator.java:399)
        at android.support.test.orchestrator.AndroidTestOrchestrator.executeNextTest(AndroidTestOrchestrator.java:319)
        at android.support.test.orchestrator.AndroidTestOrchestrator.runFinished(AndroidTestOrchestrator.java:297)
        at android.support.test.orchestrator.TestRunnable.run(TestRunnable.java:157)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:833)

大概意思就是创建测试报告失败.测试报告在哪儿呢? 之前的此文已经提到过,在这里:

/data/data/android.support.test.orchestrator/files/测试报告名称.txt

而这个目录是非 root 权限不能访问的.
所以,如果你发现你的测试用例全都执行完了,而且能够确定测试用例本身没有发生执行时的异常或断言错误,但最终结果是失败的的话,不妨换个可以 root 的机器试试.
因为我换了一个 root 机器,就成功了Ծ‸Ծ.

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册