Android アプリの JUnit テストを作成しています。Android 開発者リソース (テストの基礎、Spinner サンプル テストなど) を読みました。今度は、それを使用するアクティビティとは別に、SQLiteOpenHelper サブクラスをテストしたいと思います。私の考えは拡張することActivityInstrumentationTestCase2<Activity>
です。単純Activity
にジェネリック パラメータとして使用しても問題ありませんか、それともサブクラスが必要ですか? また、ここで正しい方向に向かっていますか、それとも SQLiteOpenHelper サブクラスをテストするより良い方法はありますか?
3 に答える
私はまさにこの問題に対する答えを探していましたが、このリンクと別の興味深い関連する質問を見つけました:
@Pietroによって受け入れられた回答は、基本的な を使用した簡単なコードを示しておりAndroidTestCase
、質問に直接回答するのに役立ちます。
public class DatabaseTest extends AndroidTestCase {
private MyDatabase db;
public void setUp(){
RenamingDelegatingContext context
= new RenamingDelegatingContext(getContext(), "test_");
db = new MyDatabase(context);
}
public void testAddEntry(){
// Here I have my new database which is not connected to the standard database of the App
}
public void tearDown() throws Exception{
db.close();
super.tearDown();
}
}
見た目がシンプルで嬉しかったです。私の場合、私は Android のテストに慣れていないので、現時点では単純なことでさえ難しいようです。
しかし、重要な興味深い部分はRenamingDelegatingContext
、通常のコンテキストを使用するだけでなく、クラスを「コンテキスト」として使用することです。これは、@Jens のコメントに基づいているようです。
このクラスは、特定のコンテキストをラップし、ほとんどの操作をそのコンテキストに委譲します。便利な部分はそれですperforms database and file operations with a renamed database/file name
(オンラインのドキュメントを参照してください)。
これにより、TEST コードでデータベースの実際の異なるインスタンスを PRODUCTION コードに使用できるようになります。少なくとも私の場合、これは役に立ちます。
これは、受け入れられた回答がほとんど同じことを言っている別の関連投稿です。
代わりに使用することに関するいくつかの役立つヒントがありContentProvider
ます (ただし、それは別の問題です)。
Android Studio でテストするには、
MockContext
の代わりに使用する必要がありRenamingDelegatingContext
ます。
を使用するRenamingDelegatingContext
と、コンテキストが null として取得されます。AndroidTestCase の場合、getContext()
null を返します。また、InstrumentationTestCase の場合getInstrumentation().getContext()
は null を返します。
詳細については、この回答を参照してください。https://stackoverflow.com/a/29063736/1020456
次のリンクでは、Android でのテストについて説明しています。
http://developer.android.com/tools/testing/testing_android.html
見逃した場合に備えて、投稿するだけですでに見たことがあるかもしれません..これは、Androidでjunitについて学ぶための非常に良いリソースです...