8

Я использую Robolectric для проверки активности из моего приложения. Действие расширяет ActionBarActivity. Когда я проверяю действие, я получаю сообщение об ошибке: «IllegalStateException: вам нужно использовать тему Theme.AppCompat (или потомок) с этим действием».Ошибка при использовании Robolectric для тестирования ActionBarActivity

Мое тестовое окружение: Android Studio 0.8.6, Robolectric 2.4-SNAPSHOT, версия-версия v4 версии 20.0, appcompat-v7 версия 20.0.

Теперь для классов. Активность:

public class FilterActivity extends ActionBarActivity 

тест Класс:

@Config(emulateSdk = 18, manifest = "src/main/AndroidManifest.xml") 
@RunWith(RobolectricTestRunner.class) 
public class FilterActivityTest 
{ 
    private FilterActivity activity; 

    @Before 
    public void setUp() throws Exception 
    { 
     activity = Robolectric.buildActivity(FilterActivity.class).create().get(); 
    } 

    @After 
    public void tearDown() throws Exception 
    { 
     activity.finish(); 
    } 

    @Test 
    public void testOnCreate() 
    { 

    } 
} 

Мой styles.xml из папки значений:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 

</style> 

трассировки стека:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110) 
at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57) 
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99) 
at ro.cursurideschimb.user.FilterActivity.onCreate(FilterActivity.java:97) 
at android.app.Activity.performCreate(Activity.java:5133) 
at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) 
at org.robolectric.util.ActivityController$1.run(ActivityController.java:113) 
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:265) 
at org.robolectric.util.ActivityController.create(ActivityController.java:110) 
at org.robolectric.util.ActivityController.create(ActivityController.java:120) 
at ro.cursurideschimb.user.FilterActivityTest.setUp(FilterActivityTest.java:38) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:267) 
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:194) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 

Благодарим Вас за ваша помощь.

+0

Что делает ваш 'андроида: theme' свойство' application' элемента в вашей точке AndroidManifest к? – iamreptar

ответ

0

Я была такая же проблема, я считаю, что это вызвано использованием @style/Theme.AppCompat.Light.DarkActionBar против Theme.AppCompat.Light.DarkActionBar

<style name="Theme.MyApp" parent="Base.Theme.MyApp"> 
</style> 

<style name="Base.Theme.MyApp" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/charcoal_gray</item> 
    <item name="colorPrimaryDark">@color/black</item> 
    <item name="colorAccent">@color/white</item> 
    <item name="android:windowBackground">@color/black</item> 
</style> 

Кроме того, возможно, стоит отметить, что при использовании более новых версий библиотеки поддержки, рекомендуется переключатель ActionBarActivity до AppCompatActivity, так как прежний теперь устарел.

Если вы используете старую цель SDK, это может относиться к вам: ActionBarCompat: java.lang.IllegalStateException: You need to use a Theme.AppCompat

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