Ily*_*nko 20 junit android bootstrapping
我需要在运行时从代码中确定应用程序是否在TestInstrumentation下运行.
我可以用一些env/system变量初始化测试环境,但Eclipse ADK启动配置不允许我这样做.
默认的Android系统属性和环境不包含任何有关它的数据.此外,它们完全相同,无论应用程序是定期启动还是正在测试中.
这可能是一个解决方案:是否有可能找出Android应用程序是否作为检测测试的一部分运行,但由于我不测试活动,所有提出的方法都不起作用.所述ActivityManager.isRunningInTestHarness()方法使用该罩下:
SystemProperties.getBoolean("ro.test_harness")
Run Code Online (Sandbox Code Playgroud)
在我的情况下总是返回false.(要使用隐藏的android.os.SystemProperties类,我使用反射).
如果它正在测试中,我还能做些什么来尝试从应用程序内部确定?
Ily*_*nko 27
我找到了一个hacky解决方案:在应用程序之外,可以尝试从测试包中加载一个类.应用程序类加载器令人惊讶地可以从测试项目中按名称加载类,如果它是在测试下运行的话.在其他情况下,找不到该课程.
private static boolean isTestMode() {
boolean result;
try {
application.getClassLoader().loadClass("foo.bar.test.SomeTest");
// alternatively (see the comment below):
// Class.forName("foo.bar.test.SomeTest");
result = true;
} catch (final Exception e) {
result = false;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我承认这不优雅,但它有效.将会感激正确的解决方案.
Dar*_*iak 13
在Android Studio 1.2.1.1上,isTestMode()解决方案对我不起作用.来自我们公司的全能Krzysztof使用以下方法调整了您的方法:
Class.forName("foo.bar.test.SomeTest");
Run Code Online (Sandbox Code Playgroud)
而不是getClassLoader().谢谢Krzysztof!
| 归档时间: |
|
| 查看次数: |
4544 次 |
| 最近记录: |