Как определить причину успешной сборки maven при сбое запуска теста вручную через IDE?

У меня есть следующая установка:

Apache Maven 3.8.1
Maven home: /Users/deyb/.sdkman/candidates/maven/current
Java version: 1.8.0_342, vendor: Azul Systems, Inc., runtime: /Users/myuser/.sdkman/candidates/java/8.0.342-zulu/zulu-8.jdk/Contents/Home/jre
Default locale: en_PH, platform encoding: US-ASCII
OS name: "mac os x", version: "12.3", arch: "aarch64", family: "mac"

Установка jdk и maven, установленная через sdkman, работающая на Mac M1.

при сборке проекта я получаю успешную сборку maven, показывающую все тесты, пройденные без сбоев. Запуск модульного теста для одного из ожидаемых сбойных классов через ide показывает результаты неудачных тестов, и я не могу понять, почему он ведет себя по-другому. Я ожидаю, что это потерпит неудачу; но сборка maven по-прежнему приводит к успешной сборке

Чтобы дать больше контекста: пример у меня есть тестовый класс: com.sample.MySampleTest

Фрагмент модульного теста

import junit.runner.Version;
...
Set<ConstraintViolation<MySample>> violations = validator.validate(dto);
        log.info("violations count >>> {}", violations.size());
        log.info("JUnit version is: " + Version.id());
        assertThat(violations, hasSize(1));

Журналы из сборки Maven:

08:04:22.880 [main] INFO  c.s.MySampleTest - violations count >>> 1
08:04:22.880 [main] INFO  c.s.MySampleTest - JUnit version is: 4.12
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 sec

Журналы из IDE, в результате которых тест не пройден:

08:05:03.431 [main] INFO  c.s.MySampleTest - violations count >>> 0
08:05:03.431 [main] INFO  c.s.MySampleTest - JUnit version is: 4.12

java.lang.AssertionError: 
Expected: a collection with size <1>
     but: collection size was <0>

    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:956)
    at org.junit.Assert.assertThat(Assert.java:923)

Я попробовал следующее и получил такое поведение:

  • сопоставил версию maven как для intellij (в комплекте), так и для maven с помощью результатов sdk-man для безотказной сборки maven (ожидается сбой, но журналы показывают все тестовые прогоны с ошибкой 0)
  • удалил все установки mvn, заменив его версией, связанной с IDE (добавлен путь к плагинам intellij в zshrc), результаты для успешной сборки maven export PATH = "$PATH:/Applications/IntelliJ IDEA CE.app/Contents/plugins/maven/lib/maven3/bin"; также сделал chmod за правильное разрешение, но результаты такие же
  • run all tests через пакет IntelliJ at com.sample показывает неудачный тест в MySampleTest (это правильное поведение)
  • run all tests через intellj, выполненный на comпакете, показывает неудачный тест в MySampleTest (это правильное поведение)
  • run all tests через intellj, выполненный на уровне модуля, показывает неудачный тест в MySampleTest (это правильное поведение)
  • переустановил установку mvn с помощью brew; получил успешную сборку maven
  • удалил каталоги junit из .m2 репозитория для повторной загрузки и сделал mvn clean install также результаты для успешной сборки
  • использовал Linux-машину в качестве сервера сборки для запуска mvn clean install результатов неудачной сборки, указывающих на неудачный тест
  • добавил тривиальный тест Assert.assertEquals(true, false); и запустил его через результаты maven для неудачной сборки (что ожидается, но сообщается только о тривиальном тесте, а не о тесте из MySampleTest)
  • версия junit также явно объявлена ​​в модуле pom (проверено с помощью junit.runner.Version.id(), чтобы обеспечить соответствие версий)

Учитывая такое поведение, есть ли другой способ определить, что приводит к успешному выполнению пакета/установки через maven cli, даже если есть неудачные тесты, и они не пропущены?

Что установлено для jdk в «Проекте» в вашей среде IDE? это то же самое, что и командная строка?

vikingsteve 21.04.2023 14:21

версия jdk в проекте одинакова как в CLI, так и в IDE

geneqew 21.04.2023 21:31
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С точки зрения процедуры, нет, это в значительной степени метод проб и ошибок. Тем не менее, вот еще несколько вещей, которые можно попробовать, некоторые из которых могут иметь или не иметь отношение к вашему конкретному тесту:

  1. Убедитесь, что вы на самом деле используете один и тот же код, т.е. не какой-то код, ранее проверенный в неправильном каталоге или из неправильной ветки и т. д. (звучит глупо, я знаю, но часто проблема)
  2. Точно так же проверьте, что любые тестовые данные, которые он может загружать, одинаковы.
  3. Настройки CLASSPATH одинаковы?
  4. То же самое для любых других переменных среды или ссылок на внешние ресурсы. например Если это не стандартная коллекция болот, а что-то из ORM, говорит ли она с той же БД под капотом?
  5. Проверьте, нет ли проблем с заказом тестов. т. е. если вы запускаете их в другом порядке в среде IDE, вы получаете другое поведение?
  6. Если это многомодульный проект maven? Если да, то работают ли тесты, если они выполняются в другом порядке на уровне модуля?
  7. Наборы символов - есть ли там что-нибудь чувствительное к строкам? Если да, то согласованы ли настройки кодировки? (использование UTF-8 везде полезно)
  8. Есть ли что-то, что чувствительно ко времени. например Если код был задержан либо IDE, либо maven, может ли это быть фактором?

2-й пункт (и 5) в списке имел значение. Тестовые данные отличались из-за статической инициализации при совместном поиске (т. е. хранилище в памяти, используемое одним из валидаторов). Пришел к выводу, что это больше вопрос дизайна. Спасибо

geneqew 24.04.2023 04:37

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