12

私はsqlliteデータベースコードをテストするためにいくつかのテストを書いています。ここで誰かが、私が取得したコンテキストを使用して、AndroidTestCase.getContext()またはを使用してこれらのテストを作成することに違いがあるかどうかを説明できますかIsolatedContext

4

3 に答える 3

9

Googleグループへのリンクをたどりたくない人のために、ここに与えられた答えがあります:

AndroidTestCase.getContext()は、通常のContextオブジェクトを返します。これはテストケースのコンテキストであり、テスト対象のコンポーネントではありません。

IsolatedContextは、「モック」コンテキストを返します。「モック」は、その用語の通常の意味でのモックではないため、引用符で囲みます(テスト用)。代わりに、自分で設定する必要があるのはテンプレートコンテキストです。実行中のAndroidシステムからユーザーを「分離」するため、コンテキストやテストが誤ってテストフィクスチャの外に出ることはありません。たとえば、IsolatedContextが誤って本番データベースにヒットすることはありません(そうするように設定していない限り)。ただし、IsolatedContextの一部のメソッドは例外をスローする可能性があることに注意してください。IsolatedContextは、開発者ガイドの「フレームワークトピック>テスト」の「基本的なテスト」と「コンテンツプロバイダーのテスト」の両方に記載されています。

これがIsolatedContextに関するAndroidドキュメントです。

そして、これがTestingFundamentalsドキュメントの関連セクションです。

于 2013-07-28T17:08:02.247 に答える
3

答え:

http://groups.google.com/group/android-developers/browse_thread/thread/3a7bbc78258a194a?tvc=2

于 2011-01-18T16:09:51.120 に答える
2

単純な問題がありました。実際のデータベースに触れることなく、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());
        ...    
    }
}
于 2014-11-29T21:55:19.463 に答える