是否有可能找出Android应用程序是否作为检测测试的一部分运行

Mar*_*tin 10 instrumentation android unit-testing

是否有应用程序的运行时检查,以确定它是否作为检测测试的一部分运行?

背景:我们的应用程序在启动时执行数据库同步.但这应该只在定期开始时才会发生.它尤其会干扰测试db sync的检测测试.不出所料.

而对于所有其他测试,它只是浪费CPU周期.

Edw*_*ale 6

从API级别11开始,ActivityManager.isRunningInTestHarness()方法可用.这可能会做你想要的.

  • 无论我在运行测试或应用程序配置,它都会返回false (8认同)

Den*_*ert 6

如果您使用的是 Robolectric,您可以执行以下操作:

public boolean isUnitTest() {
        String device = Build.DEVICE;
        String product = Build.PRODUCT;
        if (device == null) {
            device = "";
        }

        if (product == null) {
            product = "";
        }
        return device.equals("robolectric") && product.equals("robolectric");
    }
Run Code Online (Sandbox Code Playgroud)


Yan*_*ger 5

一个更简单的解决方案是检查仅存在于测试类路径中的类,该类可与JUnit 4配合使用(与使用ActivityUnitTestCase的解决方案不同),并且不需要将自定义意图发送到您的“活动/服务”(甚至可能不会)在某些情况下可能)

private boolean isTesting() {
    try {
        Class.forName("com.company.SomeTestClass");
        return true;
    } catch (ClassNotFoundException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*her 2

如果您使用的是 ActivityUnitTestCase,您可以使用 setApplication 设置自定义应用程序对象,并在其中设置一个标志来打开或关闭数据库同步?我的博客上有一个使用自定义应用程序对象的示例:

http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-3/