Gradle ile JUnit testleri nasıl çalıştırılır?


101

Şu anda aşağıdaki build.gradle dosyam var :

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


Bu build.gradle dosya benim depo içindir burada . Tüm ana dosyalarım src / model / dizinindedir ve ilgili testleri test / modeldedir .

JUnit 4 bağımlılığını doğru bir şekilde nasıl ekleyebilirim ve sonra bu testleri testler / model klasörlerinde çalıştırabilirim ?

Yanıtlar:


107

Junit 4 bağımlılığını doğru bir şekilde nasıl eklerim?

Standart bir Maven (veya eşdeğeri) deposuna karşı çözümlediğinizi varsayarsak:

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

Bu testleri testler / model klasörlerinde çalıştır?

Test kaynak kümenizi aynı şekilde tanımlarsınız:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

Ardından testleri şu şekilde çağırın:

./gradlew test

DÜZENLEME: Bunun yerine JUnit 5 kullanıyorsanız, tamamlanması gereken daha fazla adım var, bu öğreticiyi izlemelisiniz .


8
srcDirs = ["test/model"]biraz daha kesindir çünkü varsayılan test kaynakları dizininden kurtulurken srcDir "test/model"başka bir dizin ekler. mainKaynak seti için aynı .
Peter Niederwieser

51

Projenizi varsayılan gradle paket yapısıyla kurarsanız, yani:

src/main/java
src/main/resources
src/test/java
src/test/resources

o zaman testlerinizi çalıştırmak için sourceSets'i değiştirmeniz gerekmez. Gradle, test sınıflarınızın ve kaynaklarınızın src / test içinde olduğunu anlayacaktır. Ardından, yukarıda Oliver'ın dediği gibi koşabilirsiniz. Unutulmaması gereken bir şey: Özellik dosyalarını ayarlarken ve test sınıflarınızı hem gradle hem de IDE ile çalıştırırken dikkatli olun. Eclipse kullanıyorum ve JUnit'i çalıştırırken, Eclipse bir sınıf yolu (bin dizini) seçerken, gradle diğerini (derleme dizini) seçiyor. Bu, bir kaynak dosyasını düzenlerseniz ve değişikliğinizin test çalışma zamanında yansıtıldığını görmezseniz kafa karışıklığına neden olabilir.


2
Eclipse derleme dosyalarını Gradle ile aynı dizine yönlendirmek için (birkaç sinir bozucu hatayı önleyebilir): Proje -> Özellikler -> Java oluşturma yolu -> Varsayılan çıktı klasörü: "bin" yerine "yapı" yazın. Ancak ... deneyimlerime göre, bu, beklenmedik bir şekilde, varsayılan "bölme" ye "geri kayma" gibi rahatsız edici bir alışkanlığa sahip görünüyor. Eclipse'in varsayılan olarak "oluştur" u kullanmasının bir yolu olup olmadığını bilmek güzel olurdu.
mike rodent

2
@ mike-kemirgen kadarıyla ben açıkça tutulması ve gradle (bkz örn için aynı yapı yolunu paylaşmak için önerilmez biliyoruz kadar discuss.gradle.org/t/... )
mtraut

Tamam, düzeltildim! ... ve sanırım aynı dizine derlemekten elde edilecek hiçbir şey yok. Çoğu amaç için tutulma oluşturucu işlevselliği yalnızca bir doğrulama aracı haline gelir: "Hay aksi, bu x, y ve z nedeniyle derlenmez".
mike rodent

1
@DivDiff src klasörlerimin yapısı yukarıda belirtildiği gibi kuruldu, ancak yine de gradle testi yaptığımda hiçbir şey yapmıyor. Testlerimi hiç çalıştırmıyor. Herhangi bir fikir?
Gaurav

@Gaurav, seni bir sohbet odasına davet ettim, böylece bu konuda çevrimdışı konuşabiliriz.
DivDiff

16

Projenizi Spring Initializr ile oluşturduysanız , her şey doğru şekilde yapılandırılmalıdır ve yapmanız gereken tek şey çalıştırmaktır ...

./gradlew clean test --info
  • --infoTest çıktısını görmek istemiyorsanız bırakın .
  • cleanSon değişiklikten bu yana geçmiş olan testleri yeniden çalıştırmak istemiyorsanız bırakın .

build.gradleSpring Boot'da test için gerekli olan bağımlılıklar ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Bazı nedenlerden dolayı test çalıştırıcısı size bunu söylemiyor, ancak içinde bir HTML raporu oluşturuyor build/reports/tests/test/index.html.



0

Tüm mevcut olanlara ek olarak test için bir sourceSet eklemek istiyorsanız, aktif çeşniden bağımsız olarak bir modül içinde:

sourceSets {
    test {
        java.srcDirs += [
                'src/customDir/test/kotlin'
        ]
        print(java.srcDirs)   // Clean
    }
}

Operatöre dikkat +=ve entegrasyon testleri değiştirmek çalıştırmak istiyorsanız testiçin androidTest.

GL

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.