Android junitテストケース(AndroidTestCaseを拡張)でTestプロジェクトのコンテキストを取得する方法を知っている人はいますか?
注:テストは計測テストではありません。
注2:テストする実際のアプリケーションのコンテキストではなく、テストプロジェクトのコンテキストが必要です。
これは、テストプロジェクトのアセットからいくつかのファイルをロードするために必要です。
Android junitテストケース(AndroidTestCaseを拡張)でTestプロジェクトのコンテキストを取得する方法を知っている人はいますか?
注:テストは計測テストではありません。
注2:テストする実際のアプリケーションのコンテキストではなく、テストプロジェクトのコンテキストが必要です。
これは、テストプロジェクトのアセットからいくつかのファイルをロードするために必要です。
回答:
Android Testing Support Libraryには新しいアプローチがあります(現在androidx.test:runner:1.1.1
)。Kotlinの更新例:
class ExampleInstrumentedTest {
lateinit var instrumentationContext: Context
@Before
fun setup() {
instrumentationContext = InstrumentationRegistry.getInstrumentation().context
}
@Test
fun someTest() {
TODO()
}
}
アプリコンテキストも実行する場合:
InstrumentationRegistry.getInstrumentation().targetContext
完全な実行例:https : //github.com/fada21/AndroidTestContextExample
ここを見て:getTargetContext()とgetContext(InstrumentationRegistry)の違いは何ですか?
compile "com.android.support.test:runner:1.0.1"
グラドルに追加することを忘れないでください
InstrumentationRegistry.getInstrumentation().context
。代わりに使用してください。
いくつかの調査の後、唯一の実用的な解決策は、すでに指摘されているもののようです。InstrumentationTestCaseを拡張する必要がある場合は、getInstrumentation()。getContext()を使用してテストアプリケーションのコンテキストにアクセスできます。上記の提案を使用した簡単なコードスニペットを次に示します。
public class PrintoutPullParserTest extends InstrumentationTestCase {
public void testParsing() throws Exception {
PrintoutPullParser parser = new PrintoutPullParser();
parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration));
}
}
あなたが読むことができるようAndroidTestCaseのソースコード、getTestContext()
方法が隠されています。
/**
* @hide
*/
public Context getTestContext() {
return mTestContext;
}
@hide
リフレクションを使用して注釈をバイパスできます。
に次のメソッドを追加するだけAndroidTestCase
です:
/**
* @return The {@link Context} of the test project.
*/
private Context getTestContext()
{
try
{
Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
return (Context) getTestContext.invoke(this);
}
catch (final Exception exception)
{
exception.printStackTrace();
return null;
}
}
その後、getTestContext()
いつでもお電話ください。:)
java.lang.NoSuchMethodException: android.test.ServiceTestCase.getTestContext()
更新: AndroidTestCase
このクラスはAPIレベル24で廃止されましたInstrumentationRegistry
。代わりに使用してください。新しいテストは、Android Testing Support Libraryを使用して作成する必要があります。お知らせへのリンク
TestCaseではなくAndroidTestCaseから拡張する必要があります。
AndroidTestCaseクラスの概要
アクティビティコンテキストに依存するリソースやその他のものにアクセスする必要がある場合は、これを拡張します。
KotlinとMockitoでコンテキストを取得する場合は、次の方法で行うことができます。
val context = mock(Context::class.java)
私はあなたの助けを願っています
自動テストの作成中にこれらの問題が発生した場合は、次のようにする必要があります。
Context instrumentationContext;
@Before
public void method() {
instrumentationContext = InstrumentationRegistry.getInstrumentation().getContext();
MultiDex.install(instrumentationContext);
}