AndroidJUnit4.class kullanımdan kaldırıldı: androidx.test.ext.junit.runners.AndroidJUnit4 nasıl kullanılır?


258

Enstrümantasyon testlerim için

@RunWith(AndroidJUnit4.class)

itibaren

import androidx.test.runner.AndroidJUnit4;

test senaryolarımı oluşturmak için. Kullanmak için ipucu ile kaldırılan olarak Şimdi bu hat işaretlenmiş alır AndroidJUnit4dan

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

Ancak AndroidJUnit4belirtilen paketten içe aktarmaya çalışırsam hatayı alıyorum, bu extçözülemez.

Bir fikriniz var mı, bu sorunu çözmek için notta hangi paket bulunmalıdır?



4
Kaynağınızın eski olduğunu düşünüyorum, androidx'ten hiç bahsetmiyorlar.
Marcel Gangwisch

1
Android'de birim testi, hataların ve kullanım dışı bırakmaların tam bir karmaşasıdır. Benim için çalışan tek şey yeni bir karalama projesi oluşturmak, ilgili dosyaları o projeden benimkine kopyalamak, hata ayıklama moduna geçmek ve tam bir önbellek geçersiz kılma yapmaktır. Ayrıca AndroidJUnit4 testleri için paket adının kütüphane paket adıyla eşleşmesi gerekir.
Rupert Rawnsley

Yanıtlar:


378

AndroidJUnit4 belgelerine göre ,

  1. Sınıf dosyası aşağıdaki satırı içermelidir: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. Olarak değiştirin test sınıf AndroidJUnit4ClassRunnerdanAndroidJUnit4

Hala çalışmıyorsa, projenizi temizlediğinizden ve / veya yeniden oluşturduğunuzdan emin olun. Ayrıca geçerli sürümü doğrudan Google'ın maven deposunda kontrol edebilirsiniz


20
notumda bu var ve hala sorunu çözemiyor.
zuko

@zuko Projenizi temizleyin ve / veya yeniden inşa edin, orada olmalı. Hala değilse ve modüller kullanıyorsanız, bağımlılık hiyerarşinizin beklediğiniz gibi ayarlandığını kontrol edin; test kitaplıkları yukarı akış modülleri tarafından kullanılmak üzere paylaşılan modüllerde derlenmediği için bunları en üst düzey modüllere de eklemeniz gerekebilir.
Jon Adams

@JonAdams bağımlılık ağacım onları kaldırdığımı düşünsem de bir nedenden ötürü eski kütüphanelere referansta bulunmaya devam etti. bu yüzden çeşitli şeyleri denedikten sonra projeyi yeni bir projeye geçirdim ve şimdi her şey yolunda.
zuko

7
Biz de değişmelidir testInstrumentationRunner gelen gradle dosyasında androidx.test.runner.AndroidJUnitRunner için androidx.test.ext.junit.runners.AndroidJUnit4 ? Sadece bir uyumsuzluk olup olmadığını merak ediyorum.
Bir Droid

22
@A Droid İçe aktarılan eski AndroidJUnit4 paketini yenisiyle değiştirin. Sadece ithalat androidx.test.runner.AndroidJUnit4 değiştirin; ithalat androidx.test.ext.junit.runners.AndroidJUnit4 ile;
Xplosive

29

@ MarcelGangwisch'in çözümünü denediyseniz ve yapınız kaynağı bulamadığını söyleyerek başarısız olursa VE projenizi temizlediniz / yeniden oluşturduysanız ve hala çalışmıyorsa, şunu deneyin: (ayrıca @ KrzysztofDziuba'nın çözümüne dayanarak)

Bağımlılığı değiştirdiğiniz gradle dosyanızda, ihtiyacınız olan tür olarak eklediğinizden emin olun, örn .:

UI testleri için:

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

Birim testleri için:

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

Benim durumumda her ikisini de ekledim ve şimdi çalışıyor.


13

Çözüm

  1. Build.gradle için bu satırı ekleyin: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. Değişim AndroidJUnit4için AndroidJUnit4ClassRunnerdeney sınıfında

Uyarı

Aynı hatayı aldım, ancak aşağıdaki çözüm benim için başarısız oldu:

Dosya -> Önbellekleri Geçersiz Kıl ... ve Geçersiz Kıl ve Yeniden Başlat'ı seçin


12

Benim için aşağıdaki adımlar işe yaradı:
1. androidx kütüphanelerini burada yayınlananlarla değiştirin . finalim şöyle app/build.gradlegörünüyordu:

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'

}

Daha sonra ExampleInstrumentTest.javasınıfımdaki içe aktarılan modülleri el ile en son sınıflarla değiştirdim:

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");
    }
}

Beni rahatsız eden şey, InstrumentationRegisterysınıfın hala kullanımdan kaldırılmış olmasıydı. Yani kullanılan InstrumentationRegistry.getInstrumentation().getTargetContext();dan androidx.test.platform.app.InstrumentationRegistrysınıfında.


3
@RunWith(AndroidJUnit4ClassRunner.class)benim durumumda sorunun çözüldüğü kısımdı. Android Studio'nun neden bazen kullanım dışı kod oluşturduğunu anlamıyorum.
Rafsanjani

ApllicationProvider.getApplicationContext<Context>()Bunun yerine kullanınInstrumentationRegistry.getInstrumentation().getTargetContext();
Mitch

7

Resmi Android sitesine gidene kadar yukarıda verilenlerin tümünü denedim ve androidx.test.ext.junit.runners.AndroidJUnit4bunun yerine içe aktarmayı önerdiler androidx.test.runner.AndroidJUnit4. bağlantı



0

Bu AnroidX test kitaplıklarını içe aktardıysanız, projeyi senkronize edip yeniden oluşturduysanız ancak içe aktarılan paketler hala çözülemedi. Projenizi AndroidX'e nasıl yükselttiğinizi hatırlayın, Android Studio'yu kapatın ve .ideaklasörü kaldırın ve projenizi tekrar açın ...

Bu benim için çalıştı!


0
  1. Bu satırları build.gradle uygulama modülüne ekleyin.

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

  2. Test sınıfında test çalıştırıcınızı

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

  3. Eğer InstrumentationRegistry.getTargetContext()kullanımdan kaldırılmış kullanımıdır InstrumentationRegistrygelen androidx.test.platform.appböyle

    InstrumentationRegistry.getInstrumentation (). GetTargetContext ()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.