4

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 を返すのはどのシナリオですか? 私の設定は大丈夫なようです....

4

3 に答える 3

1

mContextスーパークラス(AndroidTestCase)から利用できます。コンテキストが必要なデータベースのテストに使用しました。

AndroidTestCase.class

public class AndroidTestCase extends TestCase {
    protected Context mContext;
    ...
}

AndroidTestCase の継承クラスで Context を使用できます。

TestDb.java

public class TestDb extends AndroidTestCase {
    void deleteTheDatabase() {mContext.deleteDatabase(DB_NAME)};
}
于 2016-02-11T02:55:16.233 に答える
0

これにはいくつかの方法があります。mockcontext を 1 つの解決策として使用するか、有効なコンテキストが何であるかを本当に気にしない場合は、InstrumentationTestCase を使用して、getInstrumentation().getContext を介してテスト apk のコンテキストを取得できます。 ().

コンテキストが null である理由は、実際にはこの時点で Android コンテキストが存在しないためだと思います。アプリケーションまたはアクティビティを作成することで取得できます。

于 2013-12-18T23:03:49.863 に答える