AndroidJUnit4.classは廃止されました:androidx.test.ext.junit.runners.AndroidJUnit4の使用方法?


255

私が使用していた計装テストに

@RunWith(AndroidJUnit4.class)

から

import androidx.test.runner.AndroidJUnit4;

私のテストケースを確立するために。使用するためのヒントを非推奨として今、この行がマークされますAndroidJUnit4から、

import androidx.test.ext.junit.runners.AndroidJUnit4

ただしAndroidJUnit4、指定したパッケージからインポートしようとすると、エラーが発生し、ext解決できません。

この問題を解決するために、gradleにどのパッケージを含める必要があるか、考えがありますか?



4
私はあなたのソースが時代遅れだと思います、彼らはandroidxについてまったく触れていません。
Marcel Gangwisch 2018年

1
Androidでのユニットテストは、バグと非推奨の完全な混乱です。私にとってうまくいく唯一のことは、新しいスクラッチプロジェクトを作成し、そのプロジェクトから私のファイルに関連ファイルをコピーし、デバッグモードに切り替えて、完全なキャッシュ無効化を行うことです。また、AndroidJUnit4テストでは、パッケージ名はライブラリパッケージ名と一致する必要があります。
Rupert Rawnsley

回答:


377

AndroidJUnit4のドキュメントによると、

  1. Gradleファイルには次の行が含まれている必要があります。 androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. テストクラスをAndroidJUnit4ClassRunnerからに変更AndroidJUnit4

それでも機能しない場合は、プロジェクトをクリーンアップおよび/または再ビルドしてください。また、GoogleのMavenリポジトリで現在のバージョンを直接確認することもできます


20
私のグラドルはこれを持っていますが、それでも問題を解決できません。
zuko

@zukoプロジェクトをクリーンおよび/またはリビルドすると、そこにあるはずです。それでも解決されず、モジュールを使用している場合は、依存関係の階層が期待どおりに設定されていることを確認してください。これらを最上位モジュールに追加する必要がある場合もあります。テストライブラリは、アップストリームモジュールで使用するための共有モジュールにコンパイルされないためです。
ジョンアダムス

@JonAdams私の依存関係ツリーは、何らかの理由でそれらを削除したと思っていても、古いライブラリへの参照を保持し続けました。だから、いろいろなことを試した後、プロジェクトを新しいプロジェクトに移行しただけで、すべてが順調に進んでいます。
zuko

7
我々はまた、変更する必要がありtestInstrumentationRunnerをからGradleのファイルにandroidx.test.runner.AndroidJUnitRunnerandroidx.test.ext.junit.runners.AndroidJUnit4?不一致があるかどうか疑問に思っています。
ドロイド

22
@A Droidインポートの古いAndroidJUnit4パッケージを新しいものに置き換えます。import androidx.test.runner.AndroidJUnit4を置き換えるだけです。import androidx.test.ext.junit.runners.AndroidJUnit4;
Xplosive 2019

27

@MarcelGangwischのソリューションを試してもビルドが失敗し、リソースが見つからない、プロジェクトもクリーンアップ/再構築しても機能しない場合は、これを試してください(@KrzysztofDziubaのソリューションにも基づく)。

依存関係を変更したgradleファイルで、必要なタイプとして追加していることを確認してください。つまり、

UIテストの場合:

androidTestImplementation 'androidx.test.ext:junit:1.1.0'

単体テストの場合:

testImplementation 'androidx.test.ext:junit:1.1.0'

私のインスタンスでは、両方として追加しましたが、現在は機能しています。


13

解決

  1. 次の行をbuild.gradleに追加します。 androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. 変更AndroidJUnit4AndroidJUnit4ClassRunnerテストクラスに

警告

同じエラーが発生しましたが、次の解決策は失敗しました:

ファイル->キャッシュを無効化...、そして無効化して再起動を選択します


12

私にとっては、次の手順が機能しました
。1. androidxライブラリを、ここに投稿されたライブラリに置き換えます。私の最後app/build.gradleはこのように見えました:

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }
    ...
}

dependencies {
    ...
    testImplementation 'junit:junit:4.12'

    // Core library
    androidTestImplementation 'androidx.test:core:1.2.0'

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test:rules:1.2.0'

    // Assertions
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.ext:truth:1.2.0'
    androidTestImplementation 'com.google.truth:truth:0.42'

    // Espresso dependencies
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

次に、手動でExampleInstrumentTest.javaクラスにインポートしたモジュールを最新のクラスに置き換えました。

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleInstrumentedTest {
    ...
    @Rule
    public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class, true);

    @Before
    public void init() {
        ...
    }
    @Test
    public void listCount() {
        ...
    }

    @Test
    public void useAppContext() {
        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();

        Assert.assertEquals("in.curioustools.aad_x_testing2", appContext.getPackageName());
        System.out.println("useAppContext : Test Ran");
    }
}

私を悩ませたのは、InstrumentationRegisteryクラスがまだ廃止されているという事実でした。だから私InstrumentationRegistry.getInstrumentation().getTargetContext();androidx.test.platform.app.InstrumentationRegistryクラスから使用しました。


3
@RunWith(AndroidJUnit4ClassRunner.class)私の場合、問題を解決した部分でした。Android Studioが非推奨のコードを生成することがある理由がわかりません。
ラフサンジャニ

ApllicationProvider.getApplicationContext<Context>()代わりに使用InstrumentationRegistry.getInstrumentation().getTargetContext();
ミッチ

7

私は公式のAndroidサイトに行くまで上記のすべてを試しましたが、彼らはのandroidx.test.ext.junit.runners.AndroidJUnit4代わりにからインポートすることを提案しましたandroidx.test.runner.AndroidJUnit4リンク



0

それらのAnroidXテストライブラリをインポートした場合、プロジェクトを同期して再ビルドしましたが、インポートしたパッケージはまだ解決されていません。プロジェクトをAndroidXにアップグレードした方法を覚えておいてください。AndroidStudioを閉じて.ideaフォルダを削除し、プロジェクトを再度開きます ...

これは私のために働いた!


0
  1. これらの行をbuild.gradleアプリモジュールに含めます。

    testImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. テストクラスで、テストランナーを

    import androidx.test.ext.junit.runners.AndroidJUnit4;

  3. もしはInstrumentationRegistry.getTargetContext()使用を推奨されていませんInstrumentationRegistryからandroidx.test.platform.app、このような

    InstrumentationRegistry.getInstrumentation()。getTargetContext()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.