จะเรียกใช้การทดสอบ JUnit ด้วย Gradle ได้อย่างไร


101

ขณะนี้ฉันมีไฟล์build.gradleต่อไปนี้:

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


นี้build.gradleไฟล์สำหรับการเก็บข้อมูลของฉันที่นี่ ไฟล์ทั้งหมดของหลักของฉันอยู่ในsrc / รุ่น /และการทดสอบของตนอยู่ในการทดสอบ / รุ่น

ฉันจะเพิ่มวิธี JUnit 4 พึ่งพาได้อย่างถูกต้องและเรียกใช้การทดสอบผู้ที่อยู่ในโฟลเดอร์ของการทดสอบ / รุ่น ?

คำตอบ:


107

ฉันจะเพิ่มการพึ่งพา junit 4 อย่างถูกต้องได้อย่างไร

สมมติว่าคุณกำลังแก้ไขกับ repo มาตรฐาน Maven (หรือเทียบเท่า):

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

เรียกใช้การทดสอบเหล่านั้นในโฟลเดอร์ของการทดสอบ / รุ่นหรือไม่

คุณกำหนดแหล่งที่มาของการทดสอบของคุณในลักษณะเดียวกัน:

sourceSets {
    ...

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

จากนั้นเรียกใช้การทดสอบเป็น:

./gradlew test

แก้ไข: หากคุณใช้ JUnit 5 แทนมีขั้นตอนเพิ่มเติมในการดำเนินการคุณควรทำตามบทช่วยสอนนี้


8
srcDirs = ["test/model"]จะแม่นยำกว่าเล็กน้อยเนื่องจากกำจัดไดเร็กทอรีแหล่งทดสอบเริ่มต้นในขณะที่srcDir "test/model"เพิ่มไดเร็กทอรีอื่น เหมือนกันสำหรับmainชุดแหล่งที่มา
Peter Niederwieser

51

หากคุณตั้งค่าโปรเจ็กต์ของคุณด้วยโครงสร้างแพ็กเกจไล่ระดับเริ่มต้นเช่น:

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

จากนั้นคุณไม่จำเป็นต้องแก้ไข sourceSets เพื่อเรียกใช้การทดสอบของคุณ Gradle จะทราบว่าคลาสทดสอบและทรัพยากรของคุณอยู่ใน src / test จากนั้นคุณสามารถเรียกใช้ตามที่ Oliver กล่าวไว้ข้างต้น สิ่งหนึ่งที่ควรทราบ: โปรดใช้ความระมัดระวังในการตั้งค่าไฟล์คุณสมบัติและเรียกใช้คลาสทดสอบของคุณด้วย gradle และ IDE ของคุณ ฉันใช้ Eclipse และเมื่อเรียกใช้ JUnit จากมัน Eclipse จะเลือกหนึ่งคลาสพา ธ (ไดเร็กทอรี bin) ในขณะที่ gradle เลือกอื่น (ไดเร็กทอรี build) ซึ่งอาจทำให้เกิดความสับสนหากคุณแก้ไขไฟล์ทรัพยากรและไม่เห็นการเปลี่ยนแปลงของคุณแสดงในรันไทม์ทดสอบ


2
ในการกำหนดไฟล์บิวด์ Eclipse ไปยัง dir เดียวกันกับ Gradle (สามารถป้องกันข้อผิดพลาดที่น่าหงุดหงิดเล็กน้อย): Project -> Properties -> Java build path -> Default output folder: แทนที่ "bin" ด้วย "build" อย่างไรก็ตาม ... จากประสบการณ์ของฉันสิ่งนี้ดูเหมือนจะมีนิสัยอึกอักในการ "ถอยกลับ" ไปที่ "ถังขยะ" เริ่มต้นทุกครั้งโดยไม่คาดคิด คงจะดีไม่น้อยหากมีวิธีทำให้ Eclipse ใช้ "build" ตามค่าเริ่มต้น
หนูไมค์

2
@ ไมค์-หนูเท่าที่ผมรู้ว่ามันเป็นกำลังใจอย่างชัดเจนที่จะร่วมกันสร้างเส้นทางเดียวกันสำหรับคราสและ gradle (ดูเช่นdiscuss.gradle.org/t/... )
mtraut

ตกลงฉันได้รับการแก้ไข! ... และฉันคิดว่าไม่มีอะไรจะได้รับจากการรวบรวมไปยังผบ. คนเดียวกัน สำหรับวัตถุประสงค์ส่วนใหญ่ฟังก์ชันตัวสร้าง eclipse จะกลายเป็นเครื่องมือตรวจสอบความถูกต้องเท่านั้น: "อ๊ะสิ่งนี้จะไม่รวบรวมเนื่องจาก x, y และ z"
หนูไมค์

1
@DivDiff โครงสร้างโฟลเดอร์ src ของฉันถูกตั้งค่าในลักษณะเดียวกับที่กล่าวข้างต้น แต่เมื่อฉันทำการทดสอบ gradle ก็ไม่ได้ทำอะไรเลย มันไม่เรียกใช้การทดสอบของฉันเลย ความคิดใด ๆ ?
Gaurav

@Gaurav ฉันเชิญคุณเข้าห้องแชทเพื่อที่เราจะได้คุยกันแบบออฟไลน์
DivDiff

16

หากคุณสร้างโปรเจ็กต์ของคุณด้วยSpring Initializrทุกอย่างควรได้รับการกำหนดค่าอย่างถูกต้องและสิ่งที่คุณต้องทำคือเรียกใช้ ...

./gradlew clean test --info
  • ปล่อย--infoถ้าคุณไม่ต้องการเห็นผลลัพธ์การทดสอบ
  • ปล่อยcleanถ้าคุณไม่ต้องการเรียกใช้การทดสอบซ้ำที่ผ่านไปแล้วตั้งแต่การเปลี่ยนแปลงครั้งล่าสุด

การพึ่งพาที่จำเป็นbuild.gradleสำหรับการทดสอบใน Spring Boot ...

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

ด้วยเหตุผลบางประการนักวิ่งทดสอบไม่ได้บอกคุณเรื่องนี้ แต่จะสร้างรายงาน HTML ในรูปแบบbuild/reports/tests/test/index.html.


0

testCompileเลิกใช้แล้ว รองรับ Gradle 7:

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

และถ้าคุณใช้โครงสร้างโฟลเดอร์เริ่มต้น (src / test / java / ... ) ส่วนการทดสอบคือ:

test {
    useJUnit()
}

สุดท้าย:

gradlew clean test

Alos ดู: https://docs.gradle.org/current/userguide/java_testing.html


0

หากคุณต้องการเพิ่ม sourceSet สำหรับการทดสอบนอกเหนือจากชุดที่มีอยู่ทั้งหมดภายในโมดูลโดยไม่คำนึงถึงรสชาติที่ใช้งานอยู่:

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

ความสนใจกับผู้ประกอบการ+=และถ้าคุณต้องการที่จะทำงานบูรณาการทดสอบการเปลี่ยนแปลงไปtestandroidTest

GL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.