2016-09-27 3 views
1

Я столкнулся с странным исключением IllegalStateException, и я думаю, что это проблема с Robolectric. Это трассировки стека:Robolectric IllegalState Exception

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 

at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:340) 
at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309) 
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136) 
at com.sr.dd.dd_app.screens.main.MainActivity.onCreate(MainActivity.java:87) 

MainActivity.java линия 87

setContentView(R.layout.activity_main); 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <FrameLayout android:id="@+id/main_content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/main_left_drawer" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="left|start" android:background="#FFFFFF" /> </android.support.v4.widget.DrawerLayout>

Тест блока, где активность конкретизируется:

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, shadows = {ShadowGoogleApiAvailability.class}, manifest="app/src/main/AndroidManifest.xml") 
public class ScreenUnitTest { 
    ... //Some unimportant stuff 
    @Before 
    public void setUp() { 
     ... //More unimportant stuff 
     mainActivity = Robolectric.setupActivity(MainActivity.class); 
    } 
} 

build.gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile 'junit:junit:4.12' 
    androidTestCompile 'org.mockito:mockito-core:1.+' 
    androidTestCompile 'com.google.dexmaker:dexmaker:1.2' 
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' 
    androidTestCompile 'com.android.support:support-annotations:23.3.0' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
    testCompile 'junit:junit:4.12' 
    testCompile 'org.mockito:mockito-core:1.+' 
    testCompile 'org.robolectric:robolectric:3.1' 
    testCompile "org.robolectric:shadows-support-v4:3.1" 
    testCompile "org.robolectric:shadows-play-services:3.1" 
    testCompile 'org.robolectric:shadows-maps:3.1' 
    testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1' 
    testCompile 'com.android.support:design:23.3.0' 

    compile 'com.android.support:design:23.3.0' 
    compile 'com.android.support:support-annotations:23.3.0' 
    compile 'com.android.support:appcompat-v7:23.3.0' 
    compile 'com.android.support:support-v4:23.3.0' 
    compile 'com.google.android.gms:play-services:8.1.0' 
    compile 'com.android.support:design:23.0.+' 
    compile 'com.android.support:cardview-v7:23.0.+' 
    compile 'com.android.support:recyclerview-v7:23.0.+' 
    compile 'joda-time:joda-time:2.9.4' 
} 

Компиляция с SDk версии 23

Просто интересно, если кто-то видел. Он похож на другие вопросы, но ответы, которые я нашел, не помогают.

+0

Использование Activity вместо AppCompatActivity –

+0

@MarkShen Я пытаюсь использовать DrawerLayout, который находится только в поддержке-v4. –

+0

@MarkShen Я изменил все свои фрагменты на фрагменты без поддержки, и я изменил свои действия на не поддерживающие действия. Теперь я получаю IllegalStateException: Рекурсивная запись в executePendingTransactions. :/ –

ответ

1

Удалите запись манифеста из вашего тега конфигурации, robolectric найдет его самостоятельно. Или, если необходимо, используйте файл манифеста, расположенный в каталоге сборки. Это распространенная ошибка, и тогда robolectric не может найти что-то.

+0

Это ничего не делало. Я изменил все свои фрагменты на фрагменты без поддержки, и я изменил свои действия на не поддерживающие действия. Теперь я получаю IllegalStateException: Рекурсивная запись в executePendingTransactions. –

+0

Библиотека поддержки существует не только для совместимости, но и для нового API, который недоступен в SDK –

+0

Для рекурсивной проблемы вызова нам нужно увидеть ваш код. Такая ошибка распространена, когда вы добавляете и заменяете логику фрагмента. – nenick