8

I'm using Robolectric to test an activity from my application. The Activity extends ActionBarActivity. When I test the activity I get the error :

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

My testing environment is this:

  • Android Studio 0.8.6
  • Robolectric 2.4-SNAPSHOT
  • support-v4 library version 20.0
  • appcompat-v7 version 20.0

Now for the classes. The activity :

public class FilterActivity extends ActionBarActivity

The test class:

@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()
    {

    }
}

My styles.xml from values folder:

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

</style>

The stack trace:

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)

Thank you for your help.

Yennefer
  • 5,704
  • 7
  • 31
  • 44
Andrei Zafiu
  • 501
  • 6
  • 17

1 Answers1

0

I had the same issue, I believe this is caused by using @style/Theme.AppCompat.Light.DarkActionBar vs 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>

Also, possibly worth mentioning, is that when using the newer versions of the support library, it is recommended to switch ActionBarActivity to AppCompatActivity since the former is now deprecated.

If you are using an older target sdk, this may apply to you: ActionBarCompat: java.lang.IllegalStateException: You need to use a Theme.AppCompat

Community
  • 1
  • 1
jyanks
  • 2,356
  • 1
  • 19
  • 36