Запуск котлинтест в мавене

Некоторое время я боролся за то, чтобы тесты kotlintest работали должным образом с maven. Я далеко от эксперта Maven, поэтому я надеюсь, что кто-то может сказать мне, где я иду не так.

Я начал с примера Maven из репозитория Kotlin, и это прекрасно работает. Проблема возникает, когда добавляются дополнительные тесты. Когда я добавляю больше тестов (во вложенных пакетах), "запускается" только один тест, остальные, кажется, запускают фиктивный метод теста. Например, с учетом следующей иерархии:

структура проекта

С этим pom.xml, работает mvn test дает:

Running BarTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec <<< FAILURE! - in BarTest
should fail  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.AssertionError: expected: true but was: false
Running test.BarTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.01 sec - in test.BarTest
Running a.AThingTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in a.AThingTest
Running newtest.FooTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in newtest.FooTest

Results :

Failed tests:
  BarTest expected: true but was: false

Tests run: 5, Failures: 1, Errors: 0, Skipped: 0

Самый первый: Running BarTest на самом деле правильный тест (и имеет намеренный сбой). Все остальные (Running test.BarTest, Running a.AThingTest, Running newtest.FooTest) на самом деле не запускают мои тесты (у меня там тоже есть преднамеренные сбои), и кажется, что это всего лишь несколько фиктивных тестов (возможно, от фиктивных @Test в IntelliTestMarker?). Я включил образец одного из этих тестовых файлов ниже.

Что мне нужно сделать, чтобы запустить все мои настоящие тесты? И, желательно, чтобы в выводе не отображались "фиктивные" тесты?

BarTest.kt:

package test

import io.kotlintest.shouldBe
import io.kotlintest.specs.ShouldSpec

class BarTest : ShouldSpec() {
    init {
        "Bar" {
            should("succeed") {
                true shouldBe true
            }
            should("fail") {
                false shouldBe true
            }
        }
    }
}

1 ответ

Решение

Ответ смущающе довольно прост. Обновление до 3.0.3. Это была ошибка в 3.0.0 до 3.0.2, которая затрагивала сборки Maven.

Для полноты здесь приведены подробные инструкции по проекту для KotlinTest 3.0.x.

Добавьте эту зависимость к вашему <dependencies> раздел.

    <dependency>
        <groupId>io.kotlintest</groupId>
        <artifactId>kotlintest-runner-junit5</artifactId>
        <version>3.0.3</version>
        <scope>test</scope>
    </dependency>

Убедитесь, что вы добавили surefire плагин к вашему <build><plugins> раздел и вместе с ним добавить провайдера верной платформы jUnit.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.1.0</version>
                </dependency>
            </dependencies>
        </plugin>

Примечание: есть ошибка с платформой jUnit и плагином surefire 2.20.0, поэтому придерживайтесь 2.19.1 на данный момент.

Вот полный проект на веб-сайте KotlinTest: https://github.com/kotlintest/kotlintest/tree/master/kotlintest-samples/kotlintest-samples-maven

Другие вопросы по тегам