Android:Robolectric不支持API级别1

这是我的基本testing课:

@RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Before public void setup() { //do whatever is necessary before every test } @Test public void testActivityFound() { Activity activity = Robolectric.buildActivity(MainActivity.class).create().get(); Assert.assertNotNull(activity); } } 

当我在Android Studio下执行我的testing时,使用terminal窗口,我有这个错误:

 java.lang.UnsupportedOperationException: Robolectric does not support API level 1, sorry! at org.robolectric.SdkConfig.<init>(SdkConfig.java:24) at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:320) at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:296) at org.robolectric.RobolectricTestRunner.access$300(RobolectricTestRunner.java:61) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:202) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 

Gradle信息:

 compileSdkVersion 19 buildToolsVersion "19.0.1" minSdkVersion 14 targetSdkVersion 19 versionCode 2 androidTestCompile 'org.robolectric:robolectric:2.+' androidTestCompile 'junit:junit:4.+' 

我使用最后一个Android Studio版本:0.5.8

感谢你们!

Solutions Collecting From Web of "Android:Robolectric不支持API级别1"

有几种方法:

  1. 在您的AndroidManifest.xml指定您的targetSdkVersion
  2. 创build一个自定义RobolectricTestRunner并覆盖getAppManifest方法来指定目标sdk。 例如:

     public class MyCustomRunner extends RobolectricTestRunner { @Override protected AndroidManifest getAppManifest(Config config) { String manifestPath = "your_manifest_path"; String resPath = "your_res_path"; return new AndroidManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resPath)) { @Override public int getTargetSdkVersion() { return 18; } }; } } 

    然后在@RunWith(MyCustomRunner.class) MainActivityTest类中使用它。

  3. MainActivityTest类的顶部使用@Config(emulateSdk=18)注释。

第三种方法是最简单的方法,但是您必须注释所有的testing类。 我个人更喜欢第二种方法,因为在configuration跑步者方面给了更多的灵活性。

基于安德烈的答案我试图解决我的问题,但实际上我认为@Config(emulateSdk = 18)已被删除,这是什么解决了我的问题:

 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class , sdk = 21) public class SplashActivityTest { ...... } 

Mac用户注意事项

如果您在Mac上,则可能需要configuration默认的JUnittesting运行器configuration,以解决IntelliJ / Android Studio未将工作目录设置为正在testing的模块的问题。 这可以通过编辑运行configurationDefaults – > JUnit并将工作目录的值改为$ MODULE_DIR $来完成

build立:

 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class) public class FooTest { } 

https://github.com/robolectric/robolectric/wiki/Running-tests-in-Android-Studio