Android 告诉Espresso在模拟器上运行特定测试

Android 告诉Espresso在模拟器上运行特定测试,android,junit,android-espresso,android-instrumentation,Android,Junit,Android Espresso,Android Instrumentation,我用浓缩咖啡做了安卓仪器测试。由于使用LinkedIn的TestButler()库,我的一些测试必须在模拟器上运行。该库为特定的测试运行切换wifi/gsm,这就是为什么这些测试必须在模拟器上运行的原因 我的问题是-我可以在模拟器上运行任何特定的测试,同时让其他测试在真实设备上运行吗 谢谢是的,您可以使用@ConditionalIgnore注释,如中所述 你会有类似 public class SomeTest { @Rule public ConditionalIgnoreRule ru

我用浓缩咖啡做了安卓仪器测试。由于使用LinkedIn的TestButler()库,我的一些测试必须在模拟器上运行。该库为特定的测试运行切换wifi/gsm,这就是为什么这些测试必须在模拟器上运行的原因

我的问题是-我可以在模拟器上运行任何特定的测试,同时让其他测试在真实设备上运行吗


谢谢

是的,您可以使用
@ConditionalIgnore
注释,如中所述

你会有类似

public class SomeTest {
  @Rule
  public ConditionalIgnoreRule rule = new ConditionalIgnoreRule();

  @Test
  @ConditionalIgnore( condition = NotRunningOnEmulator.class )
  public void testSomething() {
    // ...
  }
}

public class NotRunningOnEmulator implements IgnoreCondition {
  public boolean isSatisfied() {
    return !Build.PRODUCT.startsWith("sdk_google");
  }
}
编辑
对于检测设备或仿真器的这种特定情况,您也可以使用
@RequiresDevice

我发现的最简单的解决方案是使用JUnit Aspect API:

因此,在只能在模拟器上运行的测试方法中,我使用以下代码:

Assume.assumeTrue("This test must be run in an emulator!", Build.PRODUCT.startsWith("sdk_google"));
这会导致上述测试在未在模拟器上运行时被忽略,并且在“运行”窗口中出现一个方便的错误消息:



如您所见,其他两个测试都通过了(绿色),整个测试套件都能够运行。

此规则与Apache中的规则有什么区别:issues.Apache.org/jira/browse/GEODE-167