Пакет / установка Maven без тесту (пропуск тестів)


343

Я намагаюся упакувати свій проект. Але він автоматично запускає тести, які виконували попереднє виконання упаковки. Тести вставляють деякий вміст у базу даних. Це не те, що я хочу, мені потрібно уникати запуску тестів під час упаковки програми. Хтось знає, як запустити пакет з тесту?


13
Тест блоку повинен складатися з наступних 4 фаз: Ініціалізація, Тест, Перевірка та Терадоун. Можливо, вам слід скорегувати свої тести і додати тестування / очищення вашої бази даних або використовувати окремий екземпляр бази даних, не упакований з вашим файлом jar, для запуску ваших тестів.
— Марк-Крістіан Шульце

Здається, що ваші тести "важкі", тому ви не хочете їх виконувати. Але це погана практика. Можливо, деякі рамки як DBUnit можуть вам допомогти? Або ви можете відновити зміни в базі даних в кінці тесту?
— Мікаель Марраш

Відповіді:


575

Виконати Мейвен с

mvn package -Dmaven.test.skip=true 

1
дякую за негайну відповідь, я біжу від eclipse, куди я додаю команду -Dmaven.test.skip = true?
— vks

10
Я ніколи не запускав mvn від eclipse, але у вікні Run Configuration, де ви налаштовуєте цілі та профілі Maven, є прапорець "Пропустити тест". Можливо, це і зробить трюк.
— Джоргос Дімцас

9
відповідно до документації, яка буде пропускати збірку також як виконання. Ви можете використовувати -DskipTests, щоб просто пропустити виконання. Цей пост також дає кілька попереджень про те, якими версіями ви можете використовувати кожен прапор
— JonnyRaa

1
Велике спасибі, я раніше це робив за допомогою, -DskipTestsале це вже не працює, будь-яка ідея чому?
— сам

7
Зауважте, що документація Maven Surefire Plugin та Maven Failsafe Plugin дозволяє припустити, що налаштування skipTestsє кращим maven.test.skip.
— Філіп Бартек

172

Просто введіть вказану нижче команду, яка буде ігнорувати виконання тестових випадків,

mvn package -DskipTests

4
для мене це не працювало. Мені довелося використовувати прийняте рішення замість цього
— Себас

1
-DskipTestsне працював для мене, коли я використовувавmvn clean install -DskipTests
— Вішрант

1
Його частково добре, оскільки він не виконає тест, але він буде складати тестові класи .....
— Antoniossss

Для підписників - -DskipTestsце те саме, що -Dmaven.test.skip.exec=true stackoverflow.com/a/21933970/32453, і так, він компілює тести, а не запускає їх (тоді як -Dmaven.test.skip=trueне компілює їх)
— rogerdpack

47

ви можете додати цю конфігурацію плагіна до своєї пом, якщо ви не хочете встановлювати аргумент командного рядка:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skipTests>true</skipTests>
  </configuration>
</plugin>

3
Ви більше не можете запускати тести з командного рядка з цією конфігурацією.
— Еммануель Бург

1
@EmmanuelBourg Це можна усунути, дотримуючись вказівок у цьому прикладі maven.apache.org/plugins/maven-surefire-plugin/examples/…
— smp7d

1
виправлено посилання maven.apache.org/surefire/maven-surefire-plugin/examples/…
— ulab

41

Зауважте, що -Dmaven.test.skip заважає Maven будувати артефакт тестової банки.

Якщо ви хочете пропустити тести, але створити артефакти відповідно до звичайного використання збірки:

-Dmaven.test.skip.exec

1
Це було те, що я шукав, працює просто чудово. Дякую.
— Бініта Бхараті

Як, пекло, я повинен це пам’ятати? Чому б не зробити простий очевидний і запам'ятовується псевдонім на зразок "skipTests"?
— TheRealChx101

32

Якщо ви намагаєтеся це зробити в Windows Powershell, ви отримаєте цю помилку:

[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format...

Причина цього в тому, що в Powershell " -" має особливе значення, і це викликає проблеми з Maven.

Рішення полягає в тому, щоб додати його за допомогою "backtick" (наприклад).

mvn `-Dmaven.test.skip=true install 

Довідка: http://kuniganotas.wordpress.com/2011/08/12/invalid-task-test-skiptrue-you-must-specify-a-valid-lifecycle-phase/


1
У мене було те саме питання, і це вирішило це для мене. Дякую.
— nsof


18

Ви можете передати maven.test.skipпрапор як аргумент JVM, щоб пропустити запущені тести, коли запущена фаза пакета (та попередні в життєвому циклі за замовчуванням):

mvn package -Dmaven.test.skip=true

Ви також можете передати skipTestsпрапор поодинці до mvn виконуваного файлу. Якщо ви хочете включити цю інформацію в своєму POM, ви можете створити новий профіль , в якому можна налаштувати , maven-surefire-pluginщоб пропустити тести .




11

Тут дають відповідь на старе і прийняте запитання. Ви можете додати це до свого pom.xml, якщо хочете весь час уникати передачі аргументу командного рядка:

  <properties>
    <skipTests>true</skipTests>
  </properties>

11

Ви можете додати -DskipTestsабо -Dmaven.test.skip=trueбудь-яку mvnкоманду для пропускання тестів. У вашому випадку це було б так:

mvn package -DskipTests

АБО

mvn package -Dmaven.test.skip=true


4

Тести повинні завжди [1] виконуватись перед пакетом. Якщо вам потрібно вимкнути тести, ви робите щось не так. Іншими словами, ви намагаєтеся вирішити неправильну проблему. З’ясуйте, в чому насправді ваша проблема, і задайте це питання. Це здається, що це пов'язано з базою даних.

[1] Ви можете пропустити тести, коли вам потрібно швидко створити артефакт для локального використання, але в цілому створення артефакту завжди повинно слідувати успішному тесту.


У мене є аналогічна проблема: мої програми містять websocket. Коли я запускаю mvn clean install, я потрапляю у нескінченну серію тестів. До того, як я змусив її закрити, процес тривав 3 години, а повідомлення, надруковані, були майже про Websocket. Чи можете ви, будь ласка, перевірити мою проблему, щоб побачити, що я роблю неправильно? stackoverflow.com/questions/54614739 / ...
— georgeB

У правилах завжди є винятки. Якщо ви так не думаєте, ви помиляєтесь.
— Джей Салліван

3

Скорочене позначення для складання тестування Maven та пропуску:

mvn чиста установка -DskipTests


2

Для пакета Maven без інфікування тесту Maven:

<properties>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>

Дякую, мені було потрібно саме сьогодні.
— Шон Макміллан

1

Ви, очевидно, робите це неправильно. Тестування є важливою частиною попередньої упаковки. Ви не повинні ігнорувати або пропускати це, а скоріше робити це правильно. Спробуйте змінити базу даних, до якої вона вставляє дані (наприклад, test_db). Це може зайняти деякий час. Щоб переконатися, що цією базою даних можна буде користуватися назавжди, слід видалити всі дані до кінця тестів. JUnit4 має примітки, які полегшують вас. Використовуйте примітки @Before, @After @Test для правильних методів. На це потрібно витратити колись, але воно того варте!


9
Я думаю, що питання, а також бажання пакувати без запуску тестів є цілком справедливим. Я не думаю, що ОП "очевидно, робить це не так". У різних людей та проектів є різні потреби, і вони, як правило, не узгоджуються з Біблією Мейвена або віруваннями різних людей (як ви самі) про те, як повинна працювати розробка програмного забезпечення. Я думаю, що ваша відповідь була б більш вдячною без її поблажливого підходу.
— Zero3

1

У Intellij перейдіть до меню Перегляд -> Інструмент Windows -> виберіть Maven Projects. У спадному меню Lifecyle клацніть правою кнопкою миші на пакет -> виберіть Створити "свій проект [пакунок]" ...

Введіть це значення: package -Dmaven.test.skip=true -f pom.xmlу поле Командний рядок. Клацніть Застосувати, і спадне меню Запустити конфігурації має з’явитися разом із створеною спеціальною командою maven.


чому це було знято? Я використовую це щоразу, коли хотів створити свій проект, але пропускаючи тести
— Патрік Толентіно,



-1

Найкращий і найпростіший спосіб зробити це в IntelliJ Idea у вікні «Maven Project», і просто не натискайте кнопку тесту. Сподіваюся, я вам допомогла. Гарного дня :)


1
Якщо ви натиснете пакет, він запустить тести, чого OP намагається уникнути
— Чарлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.