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
나는 당신의 소스가 더 이상 사용되지 않는다고 생각합니다.
Marcel Gangwisch

1
안드로이드에서의 단위 테스트는 버그와 더 이상 사용되지 않는 혼란입니다. 나를 위해 작동하는 유일한 것은 새 스크래치 프로젝트를 만들고 해당 프로젝트에서 관련 파일을 내 프로젝트로 복사하고 디버그 모드로 전환하고 전체 캐시 무효화를 수행하는 것입니다. 또한 AndroidJUnit4 테스트의 경우 패키지 이름이 라이브러리 패키지 이름과 일치해야합니다.
Rupert Rawnsley

답변:


377

에 따르면 AndroidJUnit4에 대한 설명서 ,

  1. gradle 파일에는 다음 줄이 포함되어야합니다. androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. 테스트 클래스를 AndroidJUnit4ClassRunner에서AndroidJUnit4

여전히 작동하지 않으면 프로젝트를 정리하거나 다시 빌드하십시오. 또한 Google의 maven 저장소 에서 현재 버전을 직접 확인할 수 있습니다


20
내 gradle 에이 문제가 있으며 여전히 문제를 해결할 수 없습니다.
zuko

@zuko 프로젝트를 정리하거나 다시 빌드하십시오. 여전히 그렇지 않고 모듈을 사용중인 경우 종속성 계층 구조가 예상대로 설정되어 있는지 확인하십시오. 테스트 라이브러리는 업스트림 모듈에서 사용하기 위해 공유 모듈로 컴파일되지 않기 때문에 최상위 모듈에도 추가해야 할 수도 있습니다.
Jon Adams

@JonAdams 내 의존성 트리는 내가 제거했다고 생각했지만 어떤 이유로 든 오래된 라이브러리에 대한 참조를 계속 유지했습니다. 그래서 다양한 일을 시도한 후 프로젝트를 새로운 것으로 마이그레이션하고 모든 것이 잘되었습니다.
zuko

7
우리는 또한 변경해야 testInstrumentationRunner을 에서 Gradle을 파일에 androidx.test.runner.AndroidJUnitRunnerandroidx.test.ext.junit.runners.AndroidJUnit4 ? 불일치가 있는지 궁금합니다.
드로이드

22
@A Droid 가져 오기에서 기존 AndroidJUnit4 패키지를 새 것으로 교체하십시오. 그냥 import import androidx.test.runner.AndroidJUnit4; 가져 오기 androidx.test.ext.junit.runners.AndroidJUnit4;
Xplosive 2019

27

@MarcelGangwisch의 솔루션을 시도했지만 빌드에서 리소스를 찾을 수 없으며 프로젝트를 정리 / 재 구축해도 여전히 작동하지 않는다고 말하는 데 실패하면 다음을 시도하십시오.

의존성을 변경 한 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테스트 클래스에

경고

같은 오류가 발생했지만 다음 해결책이 실패했습니다.

File-> Invalidate Caches ...를 선택하고 Invalidate and Restart를 선택하십시오.


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)내 경우에 문제가 해결 된 부분이었습니다. 안드로이드 스튜디오가 왜 더 이상 사용되지 않는 코드를 생성하는지 왜 알지 못합니다.
Rafsanjani 2016 년

ApllicationProvider.getApplicationContext<Context>()대신 사용InstrumentationRegistry.getInstrumentation().getTargetContext();
Mitch

7

공식 안드로이드 사이트에 갈 때까지 위의 모든 것을 시도했지만 androidx.test.ext.junit.runners.AndroidJUnit4대신 에서 가져 오기를 제안했습니다 androidx.test.runner.AndroidJUnit4. 링크



0

해당 AnroidX 테스트 라이브러리를 가져온 경우 프로젝트를 동기화하고 다시 빌드했지만 가져온 패키지는 여전히 해결되지 않았습니다. 프로젝트를 AndroidX로 업그레이드 한 방법을 기억하고 Android Studio를 .idea닫은 후 폴더를 제거하고 프로젝트를 다시여십시오 .

이것은 나를 위해 일했다!


0
  1. 이 줄을 build.gradle 앱 모듈에 포함하십시오.

    테스트 구현 '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.