Pertanyaan ini telah ditanyakan sebelumnya (mis. di sini), tetapi pengamatan saya tidak sama dengan yang dilaporkan sebelumnya.

Saya perhatikan bahwa agar JUnit 5 berfungsi, saya harus menyertakan keseluruhan artefak JUnit 5

testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

Jika saya, sebagai gantinya, memasukkan artefak individu, maka tes JUnit tidak akan diambil

testImplementation('org.junit.platform:junit-platform-runner:1.3.1')
testImplementation('org.junit.platform:junit-platform-launcher:1.0.0')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1')
testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1')

Adakah yang pernah melihat sesuatu yang serupa sebelumnya?

(Saya juga mencoba ini dengan proyek non-Spring-Boot -- dalam hal ini boleh saja menyertakan artefak individual. Ini menyebabkan banyak kebingungan.)

Di sini saya menunjukkan hasilnya dengan gradle, tetapi saya juga memiliki hasil yang serupa dengan maven.

Saya menggunakan Gradle 5.4.1, Spring Boot 2.1.7.RELEASE, dan JUnit 5.5.1

Saya menyertakan build.gradle lengkap dan kelas pengujian di bawah

build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.7.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

//  testImplementation('org.junit.platform:junit-platform-runner:1.3.1')
//  testImplementation('org.junit.platform:junit-platform-launcher:1.0.0')
//  testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
//  testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')
//  testImplementation('org.junit.jupiter:junit-jupiter-params:5.5.1')
//  testImplementation('org.junit.vintage:junit-vintage-engine:5.5.1')

}

test {
    useJUnitPlatform()
}

DemoApplicationTest.java

package com.example.demo;

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

public class DemoApplicationTests {

    @Test
    public void failMe() {
        Assertions.assertTrue(Boolean.FALSE);
    }

}

Perhatikan bahwa dalam kasus ini saya mengharapkan pengecualian dilemparkan dalam metode pengujian failMe() -- untuk membuktikan bahwa metode pengujian telah diambil oleh pelari dan tidak diabaikan secara diam-diam.

1
leeyuiwah 9 Agustus 2019, 20:21

1 menjawab

Jawaban Terbaik

Terima kasih atas petunjuk dari @johanneslink (dalam komentar pertanyaan pembuka), sekarang saya pikir saya lebih memahami masalahnya:

Lebih baik menggunakan artefak agregat

testImplementation('org.junit.jupiter:junit-jupiter:5.5.1')

Jika Anda benar-benar ingin menggunakan masing-masing artefak, pastikan versinya kompatibel

Kombinasi ini akan berhasil

testImplementation('org.junit.platform:junit-platform-launcher:1.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')

Tapi bukan ini

testImplementation('org.junit.platform:junit-platform-launcher:1.3.1')
testImplementation('org.junit.jupiter:junit-jupiter-engine:5.5.1')
testImplementation('org.junit.jupiter:junit-jupiter-api:5.5.1')

(Tiga artefak lainnya tidak relevan jadi saya menghilangkannya di sini. Misalnya, menurut Panduan Pengguna JUnit 5

junit-platform-runner

Runner untuk menjalankan pengujian dan rangkaian pengujian pada Platform JUnit di lingkungan JUnit 4.

Dan tidak relevan di sini.)

2
Community 20 Juni 2020, 09:12