Пакет / установка 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.