2013-05-24 30 views
10

Tôi đang cố thêm Gradle (1.4) vào dự án hiện có có nhiều bộ thử nghiệm. Kiểm tra đơn vị tiêu chuẩn nằm ở src/test/java đã chạy thành công, nhưng tôi gặp sự cố khi thiết lập tác vụ để chạy kiểm tra JUnit nằm ở src/integration-test/java.Thêm bộ kiểm tra bổ sung vào Gradle

Khi tôi chạy gradle intTest Tôi nhận được một số lỗi cannot find symbol cho các lớp học trong src/main. Điều này khiến tôi tin rằng các phụ thuộc không được thiết lập chính xác. Làm thế nào để thiết lập intTest để nó sẽ chạy thử nghiệm tích hợp JUnit của tôi?

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 
} 

chi tiết: Gradle 1,4

Giải pháp: tôi đã không được thiết lập classpath biên dịch cho các thiết lập tích hợp mã nguồn thử nghiệm (xem dưới đây) . Trong mã tôi, tôi thiết lập các đường dẫn lớp biên dịch để sourceSets.test.runtimeClasspath vì vậy mà tôi không có sự phụ thuộc trùng lặp cho "integrationCompile"

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

Bản sao có thể có của [Làm cách nào để thêm nguồn mới vào Gradle?] (Http://stackoverflow.com/questions/11581419/how-do-i-add-a-new-sourceset-to- gradle) –

Trả lời

7

"hội nhập" sourceSet chưa thay đổi biên dịch và classpath runtime. Đó là lý do tại sao nó không thể tìm thấy các lớp từ nguồn chính của bạn. bạn có thể định cấu hình classpath biên dịch và thời gian chạy theo cách sau:

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

Cảm ơn, tôi chỉ cần thiết lập rõ ràng 'compileClasspath'. Đường dẫn lớp Runtime được tự động thiết lập là 'classes + compileClasspath' –

+1

Trong Gradle 1.6 bạn sẽ không tìm thấy' classes'. Sử dụng 'output' để thay thế. – Piohen

+0

điểm tốt piohen. Tôi đã cập nhật ví dụ của tôi –

4

Trong hầu hết các trường hợp, bạn muốn sử dụng cùng các phụ thuộc như kiểm tra đơn vị của bạn cũng như một số mới. Điều này sẽ thêm các phụ thuộc của các bài kiểm tra đơn vị của bạn lên trên các bài kiểm tra hiện có cho các bài kiểm tra tích hợp (nếu có).

sourceSets { 
    integrationTest { 
     compileClasspath += sourceSets.test.compileClasspath 
     runtimeClasspath += sourceSets.test.runtimeClasspath 
    } 
} 
+0

Bạn có liên kết một số tài liệu để hỗ trợ việc này không? Cảm ơn tài liệu –

+0

@MikeRylander về nội dung cụ thể? Nếu đó là về toán tử '+ =', bạn có thể thấy rằng 'FileCollection' có phương thức' plus' để hỗ trợ ghi đè toán tử '+' và '+ =': http://www.gradle.org/docs/current /javadoc/org/gradle/api/file/FileCollection.html – qwertzguy

+0

Tôi thấy rằng tập hợp nguồn IntegrationTest đang mở rộng đường dẫn thử nghiệm, nhưng khối mã thứ hai đang làm gì? –

Các vấn đề liên quan