web-dev-qa-db-ja.com

AndroidJUnit4.classは廃止予定です:androidx.test.ext.junit.runners.AndroidJUnit4の使い方は?

私が使っていた私のインストルメンテーションテストのために

@RunWith(AndroidJUnit4.class)

から

import androidx.test.runner.AndroidJUnit4;

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

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

しかし、名前付きパッケージからAndroidJUnit4をインポートしようとすると、エラーが発生します。そのextは解決できません。

この問題を解決するために、どのパッケージをgradleに含めるべきか、という考えがありますか。

106

AndroidJUnit4のドキュメント によると、gradleファイルには次の行が含まれているはずです。

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

これを追加した後、すべてが私のために働きました。

それでもうまくいかない場合は、必ずプロジェクトをクリーンアップまたは再構築してください。

141

私にとっては、次の手順が機能しました:
1。 androidxライブラリを here に投稿されたライブラリに置き換えます。最終的な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クラスがまだ推奨されていないという事実でした。そこで、androidx.test.platform.app.InstrumentationRegistryクラスのInstrumentationRegistry.getInstrumentation().getTargetContext();クラスを使用しました。

4
ansh sachdeva

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

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

UIテストの場合

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

単体テストの場合:

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

私の例では、私は両方としてそれを追加しました、そして今それは機能します。

1
JJ Du Plessis

私の場合はandroidTestImplementationtestImplementationに変更することが役に立ちました。私はこれを読む前に違いを知りませんでした build.gradleのtestImplementationとandroidTestImplementationのAndroidの違い

1

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

0
Prox