Запуск Cucumber в модуле Java-проекта IT

Вопрос или проблема

У меня есть структура проекта на Java с Spring, которая выглядит следующим образом:

├── src
│   ├── integrationTest
│   │   ├── java
│   │   │   ├── foo.bar.cuke.project
│   │   │   │   ├── controller
│   │   │   │   │   ├── TestControllerIT.java
│   │   │   │   ├── CucumberSpringConfiguration.java
│   │   │   │   ├── CucumberTest.java
│   │   ├── resources
│   │   │   ├── features
│   │   │   │   ├── test.feature
│   │   │   ├── junit-platform.properties
│   ├── main
│   ├── test

Вот как выглядят различные файлы:

CucumberSpringConfiguration.java:

@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
@CucumberContextConfiguration
public class CucumberSpringConfiguration {
    @Autowired
    protected TestRestTemplate testRestTemplate;
}

CucumberTest.java:

@Suite
@SelectClasspathResource("src/integrationTest/resources/features")
public class CucumberTest {
}

TestControllerIT.java:

public class TestControllerIT extends CucumberSpringConfiguration {
    @Given("random given text")
    public void testGiven() {
        System.out.println("test");
    }
}

test.feature:

Feature: Это тестовая функциональность

  Scenario: Тестовый сценарий
    Given random given text
    When a condition is met
    Then do something

junit-platform.properties:

cucumber.plugin=junit:target/cucumber-reports/cucumber.xml
cucumber.glue=foo.bar.cuke.project.controller

Я использую IntelliJ с плагинами cucumber и gherkin. Я не знаю точно, какой файл запускать, но когда я запускаю файл функциональности, я получаю следующую ошибку:

Suppressed: java.lang.SecurityException: информация о подписчике класса "org.bouncycastle.jcajce.provider.asymmetric.edec.KeyFactorySpi$Ed448" не соответствует информации о подписчике других классов в том же пакете
        at java.base/java.lang.ClassLoader.checkCerts(ClassLoader.java:1156)
        at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:911)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1020)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)

Когда я запускаю класс CucumberTest, я получаю эту ошибку:

> Task :integrationTest
  0 проходящих (1.9s)
> Task :integrationTest FAILED
FAILURE: Сборка завершилась с исключением.
* Что пошло не так:
Ошибка выполнения для задачи ':integrationTest'.
> Тесты не найдены для заданных включений: [foo.bar.cuke.project.CucumberTest](--tests filter)

В чем проблема с моей настройкой? Почему cucumber не может найти мой IT файл и запустить тест?

Мой технологический стек:

  • Java 11
  • Spring framework 5.3
  • JUnit 5
  • Cucumber 7.18
  • Gradle 7.3

Я пробовал добавить следующее в мой build.gradle без успеха:

testSets {
    integrationTest
}

test {
    systemProperty 'server.ssl.enabled', false
}

Также пробовал изменить структуру директории, чтобы контроллер IT находился в директории под названием StepDefintions.

Ответ или решение

Ваш проект Java со Spring и Cucumber имеет определенные проблемы, которые могут вызывать трудности при запуске тестов. Перед тем как предложить решение, давайте детализируем возможные причины ошибок, которые вы наблюдали.

Возможные проблемы

  1. Проблема с классами и их сигнатурой:
    У вас возникла ошибка java.lang.SecurityException: class "org.bouncycastle.jcajce.provider.asymmetric.edec.KeyFactorySpi$Ed448"'s signer information does not match signer information of other classes in the same package. Эта ошибка чаще всего возникает, когда несколько версий одной и той же библиотеки (в данном случае Bouncy Castle) присутствуют в класспасе. Проверьте ваши зависимости и убедитесь, что используете только одну версию библиотеки Bouncy Castle.

  2. Не найдено тестов:
    Сообщение No tests found for given includes: [foo.bar.cuke.project.CucumberTest] указывает на то, что JUnit не может обнаружить ваш класс тестов. Проблема может быть связана с неправильной конфигурацией вашего Gradle.

Решение

  1. Обновите файл build.gradle:
    Убедитесь, что ваш файл build.gradle правильно настроен для выполнения интеграционных тестов с Cucumber. Вот пример настройки:

    plugins {
       id 'java'
       id 'io.cucumber' version '7.18.0'
    }
    
    repositories {
       mavenCentral()
    }
    
    dependencies {
       testImplementation 'org.springframework.boot:spring-boot-starter-test'
       testImplementation 'io.cucumber:cucumber-java'
       testImplementation 'io.cucumber:cucumber-spring'
       testImplementation 'org.junit.jupiter:junit-jupiter'
       testImplementation 'org.bouncycastle:bcprov-jdk15on:1.68' // Убедитесь, что версия уникальная
    }
    
    test {
       useJUnitPlatform()
    }
    
    task integrationTest(type: Test) {
       useJUnitPlatform()
       include '**/CucumberTest*'
    }
  2. Проверьте структуру каталогов:
    Убедитесь, что ваша структура каталогов соответствует стандартам Gradle. Интеграционные тесты должны находиться в каталоге src/integrationTest/java, а ваши ресурсы в src/integrationTest/resources.

  3. Запуск тестов:
    Вам необходимо запустить интеграционные тесты через Gradle. Вы можете использовать команду:

    ./gradlew integrationTest
  4. Обновите и проверьте зависимости:
    Если вы все еще получаете ошибки, попробуйте обновить зависимости вашего проекта. Убедитесь, что у вас нет конфликтующих версий библиотек. Можно использовать команду ./gradlew dependencies для просмотра всех зависимостей и их версий.

Заключение

Следуя этим шагам, вы сможете устранить проблемы, связанные с интеграционными тестами в вашем проекте Spring с Cucumber. Обратите внимание на вывод сообщений об ошибках и проверьте зависимости, особенно версию Bouncy Castle, чтобы избежать проблем с несовместимостью. Если проблема не исчезнет, предоставьте дополнительные детали, и мы сможем рассмотреть более конкретные решения.

Оцените материал
Добавить комментарий

Капча загружается...