私はsqlliteデータベースコードをテストするためにいくつかのテストを書いています。ここで誰かが、私が取得したコンテキストを使用して、AndroidTestCase.getContext()
またはを使用してこれらのテストを作成することに違いがあるかどうかを説明できますかIsolatedContext
?
3 に答える
Googleグループへのリンクをたどりたくない人のために、ここに与えられた答えがあります:
AndroidTestCase.getContext()は、通常のContextオブジェクトを返します。これはテストケースのコンテキストであり、テスト対象のコンポーネントではありません。
IsolatedContextは、「モック」コンテキストを返します。「モック」は、その用語の通常の意味でのモックではないため、引用符で囲みます(テスト用)。代わりに、自分で設定する必要があるのはテンプレートコンテキストです。実行中のAndroidシステムからユーザーを「分離」するため、コンテキストやテストが誤ってテストフィクスチャの外に出ることはありません。たとえば、IsolatedContextが誤って本番データベースにヒットすることはありません(そうするように設定していない限り)。ただし、IsolatedContextの一部のメソッドは例外をスローする可能性があることに注意してください。IsolatedContextは、開発者ガイドの「フレームワークトピック>テスト」の「基本的なテスト」と「コンテンツプロバイダーのテスト」の両方に記載されています。
単純な問題がありました。実際のデータベースに触れることなく、DAOクラスをテストする必要があります。だから私はIsolatedContext
ドキュメントからを見つけました。しかし、最終的に私は同じドキュメントで他のコンテキストを見つけました:RenamingDelegatingContext
より使いやすいかもしれません。これが私のテストケースです:
public class AddictionDAOTest extends AndroidTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
setContext(new RenamingDelegatingContext(getContext(), "test_"));
}
public void testReadAllAddictions() throws Exception {
ImQuitDAO imQuitDAO = new ImQuitDAO(getContext());
...
}
}