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

时间:2017-08-24 19:50:14

标签: android junit android-espresso android-instrumentation

我使用Espresso进行Android测试。我的一些测试必须在模拟器上运行 - 因为使用了LinkedIn的TestButler(https://github.com/linkedin/test-butler)库。这个库为特定的测试运行切换wifi / gsm,这就是为什么这些测试必须在模拟器上运行。

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

由于

2 个答案:

答案 0 :(得分:2)

是的,您可以使用http://www.codeaffine.com/2013/11/18/a-junit-rule-to-conditionally-ignore-tests/中描述的@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

答案 1 :(得分:1)

我发现最直接的解决方案是使用JUnit Assume API:http://junit.org/junit4/javadoc/4.12/org/junit/Assume.html

所以,在只能在模拟器上运行的测试方法中,我把这段代码写成:

Assume.assumeTrue("This test must be run in an emulator!", Build.PRODUCT.startsWith("sdk_google"));

这会导致在模拟器上运行时忽略所述测试,并在运行窗口中显示一个方便的错误消息: enter image description here

正如您所看到的,其他两个测试通过正常(绿色),整个测试套件都可以运行。