AndroidTestCase を使用してテストしようとしています。アプリケーションで特定のクラスを 1 つだけテストしようとしていますが、このクラスはアクティビティ、サービスなどを拡張しません。これは、Context が必要であるという事実を除けば、基本的にプレーンな Java クラスです。これは pojo であり、その変数の一部は、SensorManager の呼び出しなど、作成時に Android API 呼び出しを必要とするオブジェクトです。私は使用しようとしました:
Context context = getContext();
テストを実行すると、「システム サービスは onCreate() の前にアクティビティで使用できません」という例外が表示されます。そのメソッドをオーバーライドする必要がありますか?
final Context context = new IsolatedContext(null, getContext())
同じものを与えます。
Robolectric のようなものではなく Android テスト フレームワークを使用している理由は、テストしているクラスがデバイスに関するハードウェア情報を収集するため、実際のデバイスでテストを実行したいからです。AndroidTestCase の開発者向けドキュメントを見てきましたが、例で探しているものがわかりません。他のテストケースクラスが私が望むものを達成するかどうかはわかりません。何か案は?
私のテストクラス:
public class DeviceTest extends AndroidTestCase {
ClassToTest mClassToTest;
@Override
protected void setUp() throws Exception {
final Context context = new IsolatedContext(null, getContext()) {
@Override
public Object getSystemService(final String pName) {
return getContext().getSystemService(pName);
}
};
mClassToTest = new ClassToTest(context);
super.setUp();
}
public void testClassMethod() {
Object mObject;
mObject = mClassToTest.getObject();
assertNotNull(mObject);
}
@Override
protected void tearDown() throws Exception {
mClassToTest = null;
super.tearDown();
}
}
前もって感謝します。
更新:セットアップを次のように変更した後:
@Override
protected void setUp() throws Exception {
super.setUp();
context = this.getContext();
mClassToTest = new ClassToTest(context);
}
コンテキストが null であるというエラーが表示されます。AndroidTestCase.getContext() が null を返すのはどのシナリオですか? 私の設定は大丈夫なようです....