2013-12-12 3 views
65

У меня есть тест, который я хотел бы запустить с Robolectric, я использую 2.3-SNAPSHOT, так как мой APP использует ActionbarCompat, который мне нужен для использования версии 2.3-SNAPSHOT, поскольку Robolectric не смог найти темы AppCompat раньше. Так что я настройки на Classpath в Eclipse, и я в конечном итоге с этим:Поддерживает ли уровень поддержки API Robolectric?

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, независимо от того, что я использовать.

Кто-нибудь получил эту работу?

+0

вы попробуйте изменить miniumum sdk до 8 и посмотреть? – user2511882

ответ

80

Update: аннотаций теперь @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 конкретных испытаний, но по крайней мере, остальные должны работать.

+1

Это работает для меня, не важно сейчас, чтобы быть на API 18. Спасибо! – Kitesurfer

+0

спасибо! есть ли способ установить это глобально? Я не хочу устанавливать (и, позднее, надеюсь, неустановленное) это при каждом тесте – ligi

+0

Да. Согласно ссылке, которую я установил, файл 'org.robolectric.Config.properties' должен сделать это для всего вашего проекта. –

9

Согласно 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")); 

Вы уверены, что вы пробовали их?

+3

Я тоже устал 18. Когда я работаю над некоторыми материалами, связанными с KitKat, мне нужно использовать API-уровень 19. – Kitesurfer

+2

Кто-нибудь знает, почему его не поддерживает API-уровень 19? – sirFunkenstine

+0

Они переместили файл здесь https://github.com/robolectric/robolectric/blob/master/robolectric/src/main/java/org/robolectric/internal/SdkConfig.java и добавили поддержку версий 4.4_r1 и 5.0.0_r2 –

27

В случае, если люди, как я, все-таки посетить ссылку для подобной ошибки,

@Config(emulateSdk =) не работает. измененном в sdk--
@Config(constants = BuildConfig.class, sdk=21)

Для меня, я получаю сообщение об ошибке с целевой версии 22,

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

и поэтому я эмулировать его до 21.

+1

Спасибо! Как вы это узнали? Я нигде не смог найти документацию. У меня возникают другие подобные проблемы с обновлением с 3.0-rc2 до 3.0, и я уверен, что они должны быть где-то документированы ...! –

+0

даже я ударился головой. Это быстрый wiki refernce, может быть вам полезен :-) https://github.com/robolectric/robolectric/wiki/2.4-to-3.0-Upgrade-Guide – Nicks

Смежные вопросы