Làm thế nào để chạy các bài kiểm tra JUnit với Gradle?


98

Hiện tại tôi có tệp build.gradle sau :

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')
}    


Đây build.gradle tập tin là cho kho lưu trữ của tôi ở đây . Tất cả các tệp chính của tôi đều nằm trong src / model / và các bài kiểm tra tương ứng của chúng nằm trong test / model .

Làm cách nào để thêm một phần phụ thuộc JUnit 4 một cách chính xác và sau đó chạy các bài kiểm tra đó trong các thư mục của bài kiểm tra / mô hình ?

Câu trả lời:


106

Làm cách nào để thêm phụ thuộc junit 4 một cách chính xác?

Giả sử bạn đang giải quyết theo repo tiêu chuẩn của Maven (hoặc tương đương):

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

Chạy các bài kiểm tra đó trong các thư mục của bài kiểm tra / mô hình?

Bạn xác định bộ nguồn thử nghiệm của mình theo cùng một cách:

sourceSets {
    ...

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

Sau đó gọi các bài kiểm tra dưới dạng:

./gradlew test

CHỈNH SỬA: Nếu bạn đang sử dụng JUnit 5 thay vào đó, có nhiều bước hơn để hoàn thành, bạn nên làm theo hướng dẫn này .


8
srcDirs = ["test/model"]chính xác hơn một chút vì nó loại bỏ thư mục nguồn thử nghiệm mặc định, trong khi srcDir "test/model"thêm một thư mục khác. Tương tự đối với bộ mainnguồn.
Peter Niederwieser

49

Nếu bạn thiết lập dự án của mình với cấu trúc gói gradle mặc định, tức là:

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

thì bạn sẽ không cần phải sửa đổi sourceSets để chạy các thử nghiệm của mình. Gradle sẽ tìm ra rằng các lớp thử nghiệm và tài nguyên của bạn nằm trong src / test. Sau đó, bạn có thể chạy như Oliver đã nói ở trên. Một điều cần lưu ý: Hãy cẩn thận khi thiết lập các tệp thuộc tính và chạy các lớp thử nghiệm của bạn với cả gradle và IDE của bạn. Tôi sử dụng Eclipse và khi chạy JUnit từ nó, Eclipse chọn một classpath (thư mục bin) trong khi gradle chọn một đường dẫn khác (thư mục xây dựng). Điều này có thể dẫn đến nhầm lẫn nếu bạn chỉnh sửa tệp tài nguyên và không thấy thay đổi của bạn được phản ánh trong thời gian chạy thử nghiệm.


2
Để hướng các tệp xây dựng Eclipse đến cùng một tệp như Gradle (có thể ngăn ngừa một số lỗi khó chịu): Dự án -> Thuộc tính -> Đường dẫn xây dựng Java -> Thư mục đầu ra mặc định: thay thế "bin" bằng "xây dựng". Tuy nhiên ... theo kinh nghiệm của tôi, điều này dường như có thói quen khó chịu là "trượt trở lại" "thùng" mặc định thường xuyên bất ngờ. Rất vui nếu biết có cách nào để Eclipse sử dụng "bản dựng" theo mặc định hay không.
mike động vật gặm nhấm

2
@ mike-động vật gặm nhấm như xa như tôi biết nó không được khuyến khích một cách rõ ràng để chia sẻ con đường xây dựng tương tự cho nhật thực và gradle (xem ví dụ discuss.gradle.org/t/... )
mtraut

Được rồi, tôi sửa lại! ... và tôi cho rằng không thu được gì từ việc biên dịch sang cùng một dir. Đối với hầu hết các mục đích, chức năng của trình tạo nhật thực trở thành một công cụ xác nhận đơn thuần: "rất tiếc, điều này sẽ không biên dịch vì x, y và z".
loài gặm nhấm mike

1
@DivDiff, cấu trúc thư mục src của tôi được thiết lập theo cùng một cách đã đề cập ở trên, nhưng khi tôi thực hiện kiểm tra gradle, nó không làm được gì cả. Nó không chạy thử nghiệm của tôi ở tất cả. Bất kỳ ý tưởng?
Gaurav

@Gaurav, tôi đã mời bạn vào phòng trò chuyện để chúng ta có thể nói chuyện ngoại tuyến.
DivDiff

15

Nếu bạn đã tạo dự án của mình bằng Spring Initializr , mọi thứ phải được định cấu hình chính xác và tất cả những gì bạn cần làm là chạy ...

./gradlew clean test --info
  • Thả --infonếu bạn không muốn xem đầu ra thử nghiệm.
  • Bỏ qua cleannếu bạn không muốn chạy lại các bài kiểm tra đã vượt qua kể từ lần thay đổi cuối cùng.

Yêu cầu phụ thuộc build.gradleđể kiểm tra trong Spring Boot ...

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

Vì một số lý do mà trình chạy thử nghiệm không cho bạn biết điều này, nhưng nó tạo ra một báo cáo HTML trong build/reports/tests/test/index.html.


0

testCompile không được dùng nữa. Tương thích Gradle 7:

dependencies {
...
   testImplementation 'junit:junit:4.13'
}

và nếu bạn sử dụng cấu trúc thư mục mặc định (src / test / java / ...) thì phần kiểm tra chỉ đơn giản là:

test {
    useJUnit()
}

Cuối cùng:

gradlew clean test

Xem trước: https://docs.gradle.org/current/userguide/java_testing.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.