2017-06-08 35 views
15

JUnit 4 testini çalıştırmayı başardıktan sonra JUnit 5'i Gradle ile kullanmaya çalışıyorum.JUnit 5 Gradle ile nasıl kullanılır?

Beklenen sonuç: Vurguladığınız JUnit 4 test güzel çıktı ve build/reports/tests yılında bir html raporunda 'geçti' verdi.

Gerçek sonucu: aşağıda JUnit 5 Test (...) build succesful yanında değil çıkış şey ben çıkış geçti hiçbir test günlüğü olmadığından testi aslında çalışmaz biliyorum ederken// atlanır başarısız oldu ve bir fail koyarak yapar Test yapıyı başarılı tutar.

Skipping task ':testClasses' as it has no actions. çalışanı, çoğu çoğunlukla alakasız çıktılar verir. Hayret, aynı zamanda xml oluşturulmaz ise, html herhangi bir test çalıştırmak gösterir ve hiçbir hata ve test gerçekten koşmak değildir, Executing task ':test' ve Generating HTML test report... Finished generating test html results ve build/test-results/test yılında xml için benzer söylüyor. Ayrıca çok ilginç düşünüyorum Ne

, benim tek bir test ben çok garip olduğunu düşünüyorum

fail("test fails"); 

taşıdığı sürece gradle test --debug

[TestEventLogger] Gradle Test Run :test STARTED 
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class- 
scan : failed to scan parent class java/lang/Object, could not find the class file 
[TestEventLogger] 
[TestEventLogger] Gradle Test Run :test PASSED 

vermesidir!

My inşa dosya Benim testtir

apply plugin: 'java' 

test { 
    dependsOn 'cleanTest' // run tests every time 

} 

sourceSets { 
    main { 
     java { 
      srcDirs 'src' 
     } 
    } 
    test { 
     java { 
      srcDirs 'test' 
     } 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    // when using this, it worked with a junit 4 test 
// testCompile 'junit:junit:4.10' 
    // this should be needed for junit 5 (using M4 is required since IJ 2017.1.2 
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
} 

test { 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
} 

olduğunu

package mypackage; 

import org.junit.jupiter.api.Test; 
import static org.junit.jupiter.api.Assertions.assertEquals; 

public class HelloWorldTest { 
    @Test 
    public void testHelloWorld(){ 
     assertEquals(2, 1+1, "message"); 
    } 
} 

Benim klasör yapısı,

java-template-project 
--- src 
    --- mypackage 
     --- HelloWorld.java 
--- test 
    --- mypackage 
     --- HelloWorldTest.java 

ve IntelliJ 2017/01/03, paketi mypackage,

kullanarak hangi ı kullanıyorum, modül yapısı bu

gibi görünüyor
java-template-project 
--- java-template-project_main 
    --- src/mypackage 
     --- HelloWorld(.java) 
--- java-template-project_test 
    --- test/mypackage 
     --- HelloWorldTest(.java) 

Bu nedenle, Gradle günümüzde kaynağı ve testleri kendi paketlerinde istemektedir. Açıkçası bu konu hakkında ilk soru değil ben

çalıştığım şey

buldum ilgili tüm sorular

+0

Aynı sorunu vardı. @Test'in "org.junit" (Junit4 @Test) yerine 'org.junit.jupiter.api' (Junit5 @Test) 'den içe aktarılması gerektiğini öğrendim. – yname

cevap

13

JUnit sürümlerinin her ikisi için de motorlara ihtiyacınız var ve JUnit platformunda gezinme eklentisini uygulamanız gerekiyor. Bunu not defterinde görmüyorum.

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath ("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4") 
    } 
} 

apply plugin: 'org.junit.platform.gradle.plugin' 
... 

dependencies { 
... 
    testCompile("junit:junit:4.12") 
    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4") 

    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4") 
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M4") 

    // Enable use of the JUnitPlatform Runner within the IDE 
    testCompile("org.junit.platform:junit-platform-runner:1.0.0-M4") 
} 

junitPlatform { 
    details 'tree' 
} 

bu konuda JUnit doc formu fazla bilgi bakınız: Burada JUnit 4 ve 5 hem yürütme çalışan bir gradle oluşturmak.

2

nedeniyle github issue için yerleşik destek

Gradle 4.6 planlanan JUnit 5, için Böylece gradle 4.6 beklenen sonucu beri fiili sonucu olarak aynı olmak zorunda.

Beklenen sonuç: Vurguladığınız JUnit 4 test güzel çıktı ve build/reports/tests yılında bir html raporunda 'geçti' verdi.

UPD:

4.6-rc-1 Şubat 2018 16'sında serbest bırakıldı ve bu sürüm için gereken yerleşik JUnit 5.

desteği etkinleştirmek için junit 5 desteği sağlar gradle

gradle wrapper --gradle-version=4.6-rc-1 

ve build.gradle için sadece bir satır ekleyin: gradle sarmalayıcı güncellemek

test { 
    useJUnitPlatform() 
} 
4

Yeni:

olarak Gradle dan here işaret Gradle 4.6

yılında JUnit 5 desteği 4.6-rc-1 itibaren JUnit 5 desteklenir! Resmi sürüm notları 4.6-rc-2 (şu anda en son) here.Eski kurulum hala çalışmaya devam edecek, ancak bunu kullanarak yapı dosyasını daha temiz hale getiriyor.

Güncelleme Gradle

Birincisi, son sürümleri here kontrol, en son Gradle sürümünü kullandığınızdan emin olun. Bu örneğin 4.6-rc-2 ise, proje konumunuzda gradlew wrapper --gradle-version=4.6-rc-2 terminalinde çalıştırın veya bu satırı gradle/wrapper/gradle-wrapper.properties dosyanızda güncellediğinizden emin olun: distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-rc-2-all.zip.

nasıl kullanılır yerleşik (yeni plugins blok kullanılarak) build.gradle dosya olacaktır sorudan java dosyaları, dizin yapısı vb Sonra

JUnit 5

plugins { 
    id 'java' 
} 

description = """ 
Gradle build file. 
This uses the gradle wrapper, so when running (the first time) use 'gradlew test' so then it 
downloads the right gradle automatically. 
""" 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.3' 
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.0.3' 
} 

sourceSets { 
    main.java.srcDirs += 'src' 
    main.resources.srcDirs += 'src' 
    test.java.srcDirs += 'test' 
    test.resources.srcDirs += 'test' 
} 

// Java target version 
sourceCompatibility = 1.8 

test { 
    // Enable JUnit 5 (Gradle 4.6+). 
    useJUnitPlatform() 

    // Always run tests, even when nothing changed. 
    dependsOn 'cleanTest' 

    // Show test results. 
    testLogging { 
     events "passed", "skipped", "failed" 
    } 
}