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 );
}
}
追加 Android:theme="@style/Theme.AppCompat"
manifest.xmlのアプリケーションの下
私が試したいことが2つあります。