web-dev-qa-db-ja.com

RobolectricはAPIレベルをサポートしていますか?

Robolectricで実行したいテストがいくつかあります。RobolectricはAppCompatテーマを見つけることができなかったため、2.3-SNAPSHOTバージョンを使用するために必要なActionbarCompat iを使用するため、2.3-SNAPSHOTを使用します。だから私はEclipseでクラスパスを設定し、これで終わります:

Java.lang.UnsupportedOperationException: Robolectric does not support API level 9, sorry!
at org.robolectric.SdkConfig.<init>(SdkConfig.Java:24)
at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.Java:288)
at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.Java:264)
at org.robolectric.RobolectricTestRunner.access$100(RobolectricTestRunner.Java:57)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:186)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.Java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:184)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:172)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:236)
at org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.Java:50)
at org.Eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.Java:38)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:467)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.Java:683)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.Java:390)
at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)

私のテストプロジェクトのマニフェストは次のとおりです。

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
      package="com.vendor.test" 
      Android:versionCode="1"
      Android:versionName="1.0">
      <application>
           <uses-library Android:name="Android.test.runner" />
      </application>
      <uses-sdk Android:minSdkVersion="19" Android:targetSdkVersion="19" />
      <instrumentation Android:name="Android.test.InstrumentationTestRunner"
       Android:targetPackage="com.vendor" />
</manifest>

使用するものに関係なく、私は常にAPIレベルについて不平を言います。

誰もこれを機能させましたか?

69
Kitesurfer

更新:注釈は@Config(sdk = 18)(または@Config(sdk = Build.VERSION_CODES.JELLY_BEAN_MR2))になり、リンクに記載されているプロパティファイルはrobolectric.properties

元の回答:@Config注釈は、RobolectricにSDKバージョンをエミュレートさせます。これを置くことができます:

import org.robolectric.annotation.Config;

@Config(emulateSdk = 18) // now @Config(sdk = 18) as of Robolectric 3.0
@RunWith(RobolectricTestRunner.class)
public class SomeTest ...

前述のファイルを使用してこれも可能です here

KitKat固有のテストの意味がわかりませんが、少なくとも他のテストは動作するはずです。

86
Saad Farooq

私のような人が、同様のエラーのリンクにまだアクセスしている場合、

@Config(emulateSdk = )は現在動作していません。そのSDKに変更-
@Config(constants = BuildConfig.class, sdk=21)

私にとっては、ターゲットバージョン22でエラーが発生していました

Java.lang.UnsupportedOperationException: Robolectric does not support API level 22

そして、私はそれを21にエミュレートしました。

28
Nicks

SdkConfig.Java によると、Roboelectricは次のバージョン/ APIレベルのみをサポートしています。

SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN, new SdkVersion("4.1.2_r1", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR1, new SdkVersion("4.2.2_r1.2", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR2, new SdkVersion("4.3_r2", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.KitKat, new SdkVersion("4.4_r1", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.Lollipop, new SdkVersion("5.0.0_r2", "0"));

これらを試したことがありますか?

10
James Muranga