web-dev-qa-db-ja.com

ActionBarActivityをテストするときは、「Theme.Appcompatテーマを使用する必要があります...」ですが、私は

Android-support-v7-appcompatのActionBarActivityを使用するアプリをAndroid JUnit test in Eclipseでテストするときに問題が発生します。エミュレーターまたはデバイスで実行すると、すべてが正常に機能するようです。

ActivityUnitTestCaseおよびstartActivity with ActionBarActivity のようにモックアプリケーションを使用してみましたが、 ActionBarCompat:Java.lang.IllegalStateException:を使用する必要があります)で提案されているように、values-v11などの親テーマを変更しましたTheme.AppCompat ですが、それでも機能しません。

このアクティビティではTheme.AppCompatテーマ(または子孫)を使用する必要があります どちらも回答を提供しません。質問をしている人は、マニフェストにTheme.AppCompatが指定されていません(私はそうします) )、また彼は実際にActionBarActivityを拡張したくありませんでした(私はそうします)。彼の解決策は、代わりに単にアクティビティを拡張することでした。

私は何が間違っているのですか?

これは私が得るエラーです(JUnitウィンドウからのFailure-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:108)
at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:57)
at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:98)
at Android.hello.HelloWorldActivity.onCreate(HelloWorldActivity.Java:14)
at Android.app.Activity.performCreate(Activity.Java:5104)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1080)
at Android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.Java:158)
at Android.hello.test.HelloWorldActivityTest.setUp(HelloWorldActivityTest.Java:26)
at Android.test.AndroidTestRunner.runTest(AndroidTestRunner.Java:190)
at Android.test.AndroidTestRunner.runTest(AndroidTestRunner.Java:175)
at Android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.Java:555)
at Android.app.Instrumentation$InstrumentationThread.run(Instrumentation.Java:1661)

HelloWorldActivity.Java

package Android.hello;

import Android.support.v7.app.ActionBar;
import Android.support.v7.app.ActionBarActivity;
import Android.app.Activity;
import Android.os.Bundle;
import Android.widget.TextView;

public class HelloWorldActivity extends ActionBarActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(Android.hello.R.id.tv);
        tv.setText("Hello, Android");

    }
}

HelloWorldApplication.Java

package Android.hello;

import Android.app.Application;
import Android.util.Log;

public class HelloWorldApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        setTheme(R.style.Theme_AppCompat);
    }
}

Hello World Manifest:

...
<activity
    Android:name=".HelloWorldActivity"
    Android:label="@string/app_name" 
    Android:theme="@style/Theme.AppCompat">
    ...
</activity>
....

テストパッケージから:

HelloWorldActivityTest.Java

package Android.hello.test;

import Android.hello.HelloWorldActivity;
import Android.content.Intent;
import Android.test.ActivityUnitTestCase;
import Android.widget.TextView;

public class HelloWorldActivityTest extends ActivityUnitTestCase<HelloWorldActivity> {

    HelloWorldActivity helloWorldActivity; 
    TextView textView;

    public HelloWorldActivityTest() {
        super(HelloWorldActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();

        // Starts the MainActivity of ScanMe
        startActivity(new Intent(getInstrumentation().getTargetContext(),       HelloWorldActivity.class), null, null);

        // Reference to the MainActivity of ScanMe
        helloWorldActivity = (HelloWorldActivity)getActivity();

        // Reference to the code input-TextEdit of the MainActivity of ScanMe
        textView = (TextView) helloWorldActivity.findViewById(Android.hello.R.id.tv);
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testPreconditions() throws Exception {
        assertNotNull(textView);
    }

    public void testInputCodeField(){
        String actual=textView.getText().toString();
        String expected = "Hello, Android";
        assertEquals(expected,actual );
    }
}
37

追加 Android:theme="@style/Theme.AppCompat"manifest.xmlのアプリケーションの下

2
Toppers

私が試したいことが2つあります。

  • OnCreateからsetThemeを削除します。マニフェストと重複しているため、混乱を招く可能性があります。
  • マニフェストのアクティビティレベルではなく、アプリケーションでテーマを設定します
1
shalafi