我使用Espresso進行Android儀器測試。由於使用了LinkedIn的TestButler(https://github.com/linkedin/test-butler)庫,我的一些測試必須在模擬器上運行。這個庫爲特定的測試運行切換wifi/gsm,這就是爲什麼這些測試必須在模擬器上運行。Tell Espresso在仿真器上運行特定測試
我的問題是 - 我可以註釋任何特定的測試運行在模擬器上,而其他測試運行在真實的設備上嗎?
感謝
我使用Espresso進行Android儀器測試。由於使用了LinkedIn的TestButler(https://github.com/linkedin/test-butler)庫,我的一些測試必須在模擬器上運行。這個庫爲特定的測試運行切換wifi/gsm,這就是爲什麼這些測試必須在模擬器上運行。Tell Espresso在仿真器上運行特定測試
我的問題是 - 我可以註釋任何特定的測試運行在模擬器上,而其他測試運行在真實的設備上嗎?
感謝
最簡單的解決方案,我發現是使用JUnit假定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"));
正如你所看到的,其他兩個測試通過的很好(綠色),並且整個測試套件都能夠運行。
是的,你在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
這種特殊情況下。
這條規則和Apache的規則有什麼區別:issues.apache.org/jira/browse/GEODE-167 –