Grape

2013-05-24 16 views
10

için ek bir test paketi ekleme Birden çok test paketi olan mevcut bir projeye Gradle (1.4) eklemeyi deniyorum. src/test/java'da bulunan standart birim testi başarıyla gerçekleştirildi, ancak src/integration-test/java'da bulunan JUnit testini çalıştırmak için bir görev ayarlamakta sorun yaşıyorum.Grape

gradle intTest'u çalıştırdığımda src/main'daki sınıflar için birkaç cannot find symbol hata alıyorum. Bu, bağımlılıkların doğru şekilde kurulmadığına inanmamı sağlıyor. JUnit bütünleştirme testlerimi çalıştırması için intTest'u nasıl ayarlayabilirim?

build.gradle

apply plugin: 'java' 

sourceCompatibility = JavaVersion.VERSION_1_6 

sourceSets { 
    integration { 
     java { 
      srcDir 'src/integration-test/java' 
     } 
     resources { 
      srcDir 'src/integration-test/resources' 
     } 
    } 
} 

dependencies { 
    compile(group: 'org.springframework', name: 'spring', version: '3.0.7') 

    testCompile(group: 'junit', name: 'junit', version: '4.+') 
    testCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') 
    testCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') 
    testCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') 

    integrationCompile(group: 'junit', name: 'junit', version: '4.+') 
    integrationCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') 
    integrationCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') 
    integrationCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') 
} 


task intTest(type: Test) { 
    testClassesDir = sourceSets.integration.output.classesDir 
    classpath += sourceSets.integration.runtimeClasspath 
} 

Detayları: Gradle 1,4

Çözüm: Ben entegrasyon testi kaynak seti için derleme sınıf yolunu ayarlamak olmasaydı (aşağıya bakınız) . Benim kod içinde ben "integrationCompile"

sourceSets { 
    integrationTest { 
     java { 
      srcDir 'src/integration-test/java' 
     } 
     resources { 
      srcDir 'src/integration-test/resources' 
     } 
     compileClasspath += sourceSets.main.runtimeClasspath 
    } 
} 
+0

Olası kopyalar http://stackoverflow.com/questions/11581419/how-do-i-add-a-new-sourceset-to- gradle) –

cevap

7

için yinelenen bağımlılıkları yok ki sourceSets.test.runtimeClasspath için derleme sınıfı yolu ayarlayın "entegrasyon" sourceSet değil, derleme ve çalışma zamanı sınıfyolu yapılandırdı. Bu yüzden dersleri ana kaynak kümenizden bulamıyor. Aşağıdaki şekilde derleme ve çalışma zamanı sınıfyolu yapılandırabilirsiniz: Çoğu durumda

sourceSets { 
    integTest { 
     java.srcDir file('src/integration-test/java') 
     resources.srcDir file('src/integration-test/resources') 
     compileClasspath = sourceSets.main.output + configurations.integTest 
     runtimeClasspath = output + compileClasspath 
    } 
} 
+0

Teşekkürler, sadece "compileClasspath" öğesini açıkça ayarlamam gerekiyordu. Runtime sınıf yolu otomatik olarak "classes + compileClasspath" –

+1

olarak ayarlanır. Gradle 1.6'da 'classes' bulamazsınız. Bunun yerine 'çıktı'yı kullanın. – Piohen

+0

iyi nokta piyohen. Örneğimi güncelledim –

4

Eğer birim testlerinin yanı sıra bazı yenilerini aynı bağımlılıkları kullanmak istiyorum. Bu, birim testlerinizin bağımlılıklarını, varsa entegrasyon testleri için mevcut olanların üstüne ekler.

sourceSets { 
    integrationTest { 
     compileClasspath += sourceSets.test.compileClasspath 
     runtimeClasspath += sourceSets.test.runtimeClasspath 
    } 
} 
[I Gradle yeni sourceset nasıl eklerim?] (Içinde
+0

Bunu desteklemek için bazı belgelerle bağlantı kurar mısınız? Teşekkürler –

+0

@MikeRylander özellikle ne ile ilgili belgeler? Eğer + + operatörü ile ilgili ise, 'FileCollection''nın' + 've' + = 'operatörünü geçersiz kılmayı destekleyen bir artı yöntemi olduğunu görebilirsiniz: http://www.gradle.org/docs/current /javadoc/org/gradle/api/file/FileCollection.html – qwertzguy

+0

IntegrationTest kaynak kümesinin test sınıf yolunu uzattığını görüyorum, ancak ikinci kod bloğu ne yapıyor? –