IsolatedContext vs. androidtestcase.getContext()
-
09-10-2019 - |
質問
SQLLITEデータベースコードをテストするためのテストをいくつか執筆しています。ここの誰かが、私が得るコンテキストを使用してそれらのテストを書く違いがあるかどうかを説明できますか AndroidTestCase.getContext()
またはを使用します IsolatedContext
.
他のヒント
Googleグループへのリンクをたどりたくない人のために、そこに与えられた答えは次のとおりです。
androidtestcase.getContext()は、通常のコンテキストオブジェクトを返します。テスト中のコンポーネントではなく、テストケースのコンテキストです。
IsolatedContextは、「モック」コンテキストを返します。その用語の通常の意味ではモックではないため、「モック」を引用符で掲載しました。代わりに、それは自分自身をセットアップする必要があるテンプレートのコンテキストです。実行中のAndroidシステムから「分離」するため、コンテキストやテストは誤ってテストフィクスチャの外に出ないようにします。たとえば、孤立したContextが誤って本番データベースを押さないようにしません(それを行うように設定しない限り!)に注意してください。ただし、分離Contextのメソッドの一部は例外をスローする可能性があることに注意してください。 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());
...
}
}