Изучите плагин Maven Surefire (JUnit) Maven «Рекомендуемая коллекция»
Изучите плагин Maven Surefire (JUnit) Maven «Рекомендуемая коллекция»

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.


1.Что, черт возьми, такое плагин maven-surefire?

Если вы выполнилиmvn testилиили выполнить другоеmavenЗаказ При запуске тестового примера,Вы уже использовали егоmaven-surefire-pluginПонятно。maven-surefire-pluginдаmavenПлагин, выполняющий тестовые случаи в,Если конфигурация не отображается, будет использоваться конфигурация по умолчанию.。этого плагинаsurefire:testЗаказ Будет привязано по умолчаниюmavenисполняемый файлtestэтап。

Каковы этапы жизненного цикла Maven? [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]


2. Использование плагина maven-surefire.

Если у maven уже есть конфигурация maven-surefire-plugin по умолчанию, нужно ли нам еще знать конфигурацию maven-surefire-plugin? Ответ: да. Хотя maven-surefire-plugin имеет конфигурацию по умолчанию, когда нам нужно изменить некоторые стратегии выполнения тестов, нам необходимо перенастроить этот плагин.

2.1.Настройка JUnit

2.1.1. Автоматическое сопоставление плагина.

Самый простой метод настройки — не настраивать и не объявлять плагин.

Язык кода:javascript
копировать
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.19</version>
</plugin>

В это время maven-surefire-plugin будет следовать следующей логике, чтобы найти версию JUnit и выполнить тестовый пример.

Язык кода:javascript
копировать
if the JUnit version in the project >= 4.7 and the parallel attribute has ANY value
	use junit47 provider
if JUnit >= 4.0 is present
	use junit4 provider
else
	use junit3.8.1

2.1.2. Ручное сопоставление плагинов.

Конечно, если вы явно используете JUnit 4.7 и выше, вы можете явно объявить:

Язык кода:javascript
копировать
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.19</version>
	<dependencies>
		<dependency>
			<groupId>org.apache.maven.surefire</groupId>
			<artifactId>surefire-junit47</artifactId>
			<version>2.19</version>
		</dependency>
	</dependencies>
</plugin>

Для версий от JUnit4.0 (включительно) до JUnit4.7 (эксклюзивно) объявите это следующим образом:

Язык кода:javascript
копировать
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.19</version>
	<dependencies>
		<dependency>
			<groupId>org.apache.maven.surefire</groupId>
			<artifactId>surefire-junit4</artifactId>
			<version>2.19</version>
		</dependency>
	</dependencies>
</plugin>

Для версий от JUnit3.8 (включительно) до JUnit4.0 (эксклюзивно) объявите это следующим образом:

Язык кода:javascript
копировать
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.19</version>
	<dependencies>
		<dependency>
			<groupId>org.apache.maven.surefire</groupId>
			<artifactId>surefire-junit3</artifactId>
			<version>2.19</version>
		</dependency>
	</dependencies>
</plugin>

Surefire не поддерживает версии JUnit ниже 3.8. Рекомендуется использовать последнюю версию JUnit — 4.12.

Язык кода:javascript
копировать
<dependencies>
	[...]
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
	[...]        
</dependencies>

Для примера в этой статье мы используем Junit4.12.

2.2. Подготовьте тестовые примеры.

Теперь мы подготавливаем два класса: тестируемый класс и тестовый пример. Структура каталогов следующая.

Теперь готовим простой класс.

Язык кода:javascript
копировать
package com.qyf404.learn.maven;

public class App {
    public int add(int a, int b) {
        return a + b;
    }
    public int subtract(int a, int b) {
        return a - b;
    }
}

Создайте еще один тестовый пример.

Язык кода:javascript
копировать
package com.qyf404.learn.maven;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class AppTest {
    private App app;
    @Before
    public void setUp() {
        app = new App();
    }
    @Test
    public void testAdd() throws InterruptedException {
        int a = 1;
        int b = 2;
        int result = app.add(a, b);
        Assert.assertEquals(a + b, result);
    }
    @Test
    public void testSubtract() throws InterruptedException {
        int a = 1;
        int b = 2;
        int result = app.subtract(a, b);
        Assert.assertEquals(a - b, result);
    }
    @After
    public void tearDown() throws Exception {
    }
}

2.3. Используйте maven для выполнения тестовых случаев.

Выполнять тестовые примеры с помощью maven очень просто. напрямуюmvn testВот и все.Обычно мы выполняемmavenПакет Заказmvn packageвпередmavenбудет выполнено по умолчаниюtestЗаказ.

Язык кода:javascript
копировать
qyfmac$ mvn test
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building learn-maven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ learn-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qyfmac/git/learn-maven/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ learn-maven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /Users/qyfmac/git/learn-maven/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ learn-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qyfmac/git/learn-maven/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ learn-maven ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 2 source files to /Users/qyfmac/git/learn-maven/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.19:test (default-test) @ learn-maven ---
[WARNING] The parameter forkMode is deprecated since version 2.14. Use forkCount and reuseForks instead.
[INFO] Surefire report directory: /Users/qyfmac/git/learn-maven/target/surefire-reports
[INFO] Using configured provider org.apache.maven.surefire.junit4.JUnit4Provider

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.qyf404.learn.maven.AppTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in com.qyf404.learn.maven.AppTest

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.622 s
[INFO] Finished at: 2015-12-01T11:36:04+08:00
[INFO] Final Memory: 14M/228M
[INFO] ------------------------------------------------------------------------
qyfmac$ 

Фактически, мы обнаружим, что ключевым содержимым по-прежнему является JUnit, который служит лишь вызывающей стороной для вызова этих тестовых случаев.

3.Дополнительно

Давайте изучим это позжеmaven-surefire-pluginБольше информации об этом плагине,Большинство из них связаны с конфигурацией.

3.1. Пропустить тестовые случаи.

На работе во многих случаях мы не хотим выполнять тестовые примеры при упаковке. Тестовые примеры могут быть не завершены или тестовые примеры могут повлиять на данные базы данных. Есть три способа пропустить процесс выполнения тестового сценария.

3.1.1.Объявить в конфигурации

Объявите пропущенные тестовые случаи в конфигурации конфигурации плагина.

Язык кода:javascript
копировать
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>2.19</version>
        </dependency>
    </dependencies>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

3.1.2.Объявление в свойствах

Объявить пропущенные тестовые случаи в конфигурации свойств.

Язык кода:javascript
копировать
<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

или

Язык кода:javascript
копировать
<properties>
    <skipTests>true</skipTests>
</properties>

3.1.3. Оператор команды выполнения.

Вы можете объявить пропуск тестовых случаев при выполнении команд maven.

Язык кода:javascript
копировать
qyfmac$ mvn test -Dmaven.test.skip=true

или

Язык кода:javascript
копировать
qyfmac$ mvn test -DskipTests=true

3.1.4. Пропустить приоритезацию тестовых примеров.

Во-первых, есть две ситуации,Что-то вродеда КонфигурацияskipTests,Что-то вродеда Конфигурацияmaven.test.skip(Действительно ужасно,Пунктов декларирования всего три.,Также придумал два имени переменных,Всего 5 ситуаций).

  • еслида КонфигурацияskipTests, Конфигурация конфигурации имеет наивысший приоритет, за ней следует конфигурация в команде. Конфигурация свойств самая низкая.
  • Прямо сейчасconfiguration > Заказ > properties
  • еслида Конфигурацияmaven.test.skip,Конфигурация в Заказе имеет наивысший приоритет., Конфигурация свойств самая низкая. Прямо сейчасЗаказ > properties
  • skipTestsиmaven.test.skipОдин настроен на Понятноtrue,тогда пропусти тестовый пример. Прямо сейчасskipTests||maven.test.skipРешатьда Пропускать ли тестовые случаиосуществлять.

3.2. Команда maven выполняет тестовый пример.

Во многих случаях после того, как мы напишем тестовый пример, мы хотим немедленно запустить его, чтобы увидеть выполнение. Если вы используете IDE для разработки, обычно существует метод прямого запуска тестового примера. Но если вы используете команду maven для этого. Чтобы добиться того же эффекта, вам нужно Добавлены некоторые параметры команды.

Например, давайте добавим еще один тестовый пример App2Test.java.

Язык кода:javascript
копировать
package com.qyf404.learn.maven;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class App2Test {
    private App app;
    @Before
    public void setUp() {
        app = new App();
    }
    @Test
    public void testAdd() throws InterruptedException {
        int a = 1;
        int b = 2;
        int result = app.add(a, b);
        Thread.currentThread().sleep(1000);
        Assert.assertEquals(a + b, result);
    }
    @After
    public void tearDown() throws Exception {
    }

}

Непосредственный запуск теста mvn выглядит следующим образом: он выполняет все тестовые примеры.

Язык кода:javascript
копировать
qyfmac$ mvn test
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building learn-maven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------

...

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.qyf404.learn.maven.App2Test
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.004 sec - in com.qyf404.learn.maven.App2Test
Running com.qyf404.learn.maven.AppTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec - in com.qyf404.learn.maven.AppTest

Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.773 s
[INFO] Finished at: 2015-12-01T14:57:00+08:00
[INFO] Final Memory: 9M/156M
[INFO] ------------------------------------------------------------------------

Теперь мы используем Заказmvn test -Dtest=App2TestУкажите исполнениеApp2Test.

Язык кода:javascript
копировать
qyfmac$ mvn test -Dtest=App2Test
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building learn-maven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------

...

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.qyf404.learn.maven.App2Test
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.003 sec - in com.qyf404.learn.maven.App2Test

Results :

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

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.061 s
[INFO] Finished at: 2015-12-01T14:58:59+08:00
[INFO] Final Memory: 9M/156M
[INFO] ------------------------------------------------------------------------

-DtestПараметрыдадоступныйвыражениеиз.

  • Например, чтобы выполнить несколько тестовых случаев, вы можете разделить их запятыми. mvn test -Dtest=App2Test,AppTest.
  • Также можно использоватьantвыражение пути к стилюmvn test -Dtest=*2Test,mvn test -Dtest=???2Test.
  • Даже указать конкретные методы испытанийmvn test -Dtest=*Test#testAdd.
  • Укажите тестовые примеры в конкретных пакетахmvn test -Dtest=com/qyf404/learn/maven/*.

3.3. Включение тестовых примеров и настройка исключений.

Сказано выше,При выполнении Заказа вы можете указать, какие тестовые случаи выполнять.,Фактически, его также можно настроить в pom.xml. Например, чтобы при упаковке выполнялся тестовый пример AppTest, но не выполнялся App2Test, его можно настроить следующим образом.

Язык кода:javascript
копировать
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit47</artifactId>
            <version>2.19</version>
        </dependency>
    </dependencies>
    <configuration>
        <!--Конфигурацияда Пропускать ли тестовые случаиосуществлять-->
        <!--<skipTests>true</skipTests>-->
        <includes>
            <include>**/AppTest.java</include>
        </includes>
        <excludes>
            <exclude>**/App2Test.java</exclude>
        </excludes>
    </configuration>
</plugin>

<include>и<exclude>里из Конфигурация方式и-DtestВыражения можно настроить следующим образом::

  • Укажите конкретный класс<include>AppTest</include>.
  • Укажите конкретный класс<include>AppTest.java</include>.
  • Укажите конкретный класс<include>AppTest.class</include>.
  • Укажите конкретный класс<include>com/qyf404/learn/maven/AppTest.class</include>.
  • Укажите конкретный класс<include>com/qyf404/learn/maven/AppTest.class,App2Test</include>.
  • Восклицательный знак[!]выражать отрицание<include>!*2Test.class</include>.
  • использоватьantвыражение пути к стилю<include>**/*Test</include>.
  • использоватьantвыражение пути к стилю<include>**/???Test</include>.
  • более сложный%regex[expr]выражение<include>%regex[com.qyf404.learn.maven.*Test.class]</include>.
  • более сложный%regex[expr]выражение<include>%regex[com.qyf404.*.*Test.class]</include>.
  • более сложный%regex[expr]выражение<include>%regex[com.qyf404.[learn|test].*Test.class]</include>,Квадратные скобки посередине обозначают концепцию или,Это случай обучения или тестирования.
  • более сложный%regex[expr]выражение<include>!%regex[com.qyf404.*.*2Test.class]</include>,Восклицательный знак здесь означает отрицание,То есть включены тестовые примеры, которые не соответствуют выражению.
  • более сложный%regex[expr]выражение<include>%regex[.*2Test.class]</include>,Эта конфигурация игнорирует префикс пакета.,Это можно понимать как сопоставление полного имени класса задом наперед.
  • более сложный%regex[expr]выражение Лучше всего, чтобы в нем не было никаких вопросительных знаков.[?],И что соответствует полному имени класса.
  • Невозможно указать конкретный метод,这种Конфигурацияда错误из<include>*Test#testAdd</include>.
  • Невозможно указатьjavaФайл находится в%regex[expr]конкретные методы,这种Конфигурацияда错误из<include>%regex[com.qyf404.learn.maven.*Test.java]</include>.
  • если同час Конфигурация Понятно<include>и<exclude>,Последний выполненный тестовый пример является пересечением этих двух.

3.4. Выполнение тестовых случаев в группах.

Мы сказали выше,Можно настроить<include>Эта информация используется для контроля выполнения тестовых случаев.,нодаJUnitЕсть заметка в@CategoryГруппы тестовых случаев можно группировать и отмечать,При использовании maven для выполнения тестовых случаев,Мы также можем использовать разметку этой аннотации,чтобы определить, какой набор тестовых примеров выполнить.

Например, наш тестовый пример выглядит так:

Язык кода:javascript
копировать
package com.qyf404.learn.maven;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;


public class AppTest {
    private App app;
    @Before
    public void setUp() {
        app = new App();
    }
    @Test
    @Category(com.qyf404.learn.maven.FastTests.class)
    public void testAdd() throws InterruptedException {
        int a = 1;
        int b = 2;
        int result = app.add(a, b);
        System.out.println("---" + Thread.currentThread().getName());
        Assert.assertEquals(a + b, result);
    }
    @Test()
    @Category(com.qyf404.learn.maven.SlowTests.class)
    public void testSubtract() throws InterruptedException {
        int a = 1;
        int b = 2;
        int result = app.subtract(a, b);
        System.out.println("---" + Thread.currentThread().getName());
        Assert.assertEquals(a - b, result);
    }
    @After
    public void tearDown() throws Exception {
    }

}

Это конфигурация в pom.xml:

Язык кода:javascript
копировать
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <groups>com.qyf404.learn.maven.SlowTests</groups>
    </configuration>
</plugin>

в исполненииmvn testчас,тогда будет выполнена только разметка@Category(com.qyf404.learn.maven.SlowTests.class)тестовые примеры.

3.5. Если какой-либо тест не выполняется, пропустите другие тесты.

При упаковке все тестовые примеры будут выполнены по умолчанию, а затем будет выдан статистический результат выполнения, как показано ниже:

Язык кода:javascript
копировать
Results :

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

Во многих случаях мы надеемся, что тестовые примеры не завершатся неудачей до того, как они будут упакованы. Если упаковка не удалась, нам необходимо немедленно прекратить выполнение других тестовых примеров. Чтобы удовлетворить этому требованию, нам нужно добавить некоторые параметры конфигурации.

Язык кода:javascript
копировать
<configuration>
    <skipAfterFailureCount>1</skipAfterFailureCount>
</configuration>

цифры внутри1Указывает, что если тестовый пример не может быть выполненили Произошло исключениечас,Пропустите другие последующие тестовые случаи.На самом деле это число всего лишьда一个大于零из数Вот и все.表达из意思Сразуда Когда естьNТестовые случаи не удалось выполнитьилианомальныйчас,Пропустите другие последующие тестовые случаи.

3.6. Перезапустите неудачные тестовые случаи.

Когда один из наших тестовых примеров тестирует удаленный сервис, в некоторых случаях выполнение тестового примера может завершиться неудачей из-за проблем окружающей среды (например, сети), но это не проблема программы. Другими словами, когда тестовый пример выполняется N раз. , если выполнение один раз завершилось успешно, оно считается успешным. В этот момент нам необходимо настроить параметр. Если выполнение не удалось, вариант использования будет выполнен снова.

Язык кода:javascript
копировать
<configuration>
    <rerunFailingTestsCount>2</rerunFailingTestsCount>
</configuration>

цифры внутри2означает, когда что-то Тестовые случаи не удалось выполнитькназад,Можно перезапустить 2 раза,Тестовый пример считается успешным, если он успешно выполнен один раз..внутри2если бы толькода一个大于零из整数Вот и все,Указывает количество повторных попыток. Если повторная попытка произошла.,В отчете о выполнении maven будет еще один Flakes.

Язык кода:javascript
копировать
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.qyf404.learn.maven.App2Test
Tests run: 3, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 3.023 sec <<< FAILURE! - in com.qyf404.learn.maven.App2Test
testAdd(com.qyf404.learn.maven.App2Test)  Time elapsed: 1.012 sec  <<< FAILURE!
java.lang.AssertionError: expected:<2> but was:<3>
        at com.qyf404.learn.maven.App2Test.testAdd(App2Test.java:32)

testAdd(com.qyf404.learn.maven.App2Test)  Time elapsed: 1.006 sec  <<< FAILURE!
java.lang.AssertionError: expected:<2> but was:<3>
        at com.qyf404.learn.maven.App2Test.testAdd(App2Test.java:32)

Running com.qyf404.learn.maven.AppTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec - in com.qyf404.learn.maven.AppTest

Results :

Flaked tests: 
com.qyf404.learn.maven.App2Test.testAdd(com.qyf404.learn.maven.App2Test)
  Run 1: App2Test.testAdd:32 expected:<2> but was:<3>
  Run 2: App2Test.testAdd:32 expected:<2> but was:<3>
  Run 3: PASS


Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Flakes: 1

3.7.Debugging Tests

Как правило, мы можем выполнять тестовые примеры непосредственно в IDE.,Иногда это случается,Непосредственное выполнение тестовых примеров в IED не представляет проблемы.,нодаиспользоватьmavenЗаказ Пакетчас Сразуосуществлятьнеудача Понятно.мы можем Заказ Присоединяйтесь-Xили--debugчтобы распечатать дополнительную информацию журнала для устранения проблемы.Но его также можно включитьJVMпорт отладки для удаленного доступаdebug.

3.7.1. Выполнение команды maven в режиме отладки.

осуществлятьmavenЗаказmvn -Dmaven.surefire.debug testчтобы включить режим отладки.конечно Также можно использоватьнад整из Заказуказать порт

Язык кода:javascript
копировать
mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -Xnoagent -Djava.compiler=NONE" test

После выполнения команды это выглядит так:

Язык кода:javascript
копировать
qyfmac$ mvn -Dmaven.surefire.debug test
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building learn-maven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ learn-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qyfmac/git/learn-maven/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ learn-maven ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ learn-maven ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qyfmac/git/learn-maven/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ learn-maven ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.19:test (default-test) @ learn-maven ---

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Listening for transport dt_socket at address: 5005

Позже нам нужно будет использовать это5005Порт для запуска локального исходного кода Понятно.

3.7.2. Удаленная отладка с использованием IDE.

Прежде чем приступить к отладке, вам необходимо настроить IDE. Я буду использовать идею в качестве примера, чтобы объяснить, как ее настроить.

  1. Выберите в правом верхнем углуEdit Configurations....
  1. В открывшемся диалоговом окне выберите знак плюса в левом верхнем углу.,затем выберитеRemote.
  1. Настройка параметров удаленной отладки в основном включает изменение имени и порта. Другие конфигурации обычно не требуют изменения. После настройки нажмите «Сохранить».
  1. Установите точку останова в тестовом примере, который вы хотите отладить.
  1. Выберите конфигурацию, которую вы только что установили, чтобы начать удаленную отладку.
  1. Начните отладку вашей программы.

3.8. Параллельное выполнение тестовых случаев.

Если тест-кейсов много и они не будут влиять друг на друга при параллельном выполнении, то мы можем настроить несколько потоков, чтобы ускорить эффективность выполнения тест-кейсов.

Язык кода:javascript
копировать
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.19</version>
	<configuration>
		<parallel>methods</parallel>
		<threadCount>10</threadCount>
	</configuration>
</plugin>

3.9. Посмотреть отчет об испытаниях.

в исполнениинадmvn testназад,будет внутриtargetСоздать отчет об испытаниях в каталоге

Всего существует два файла. В файле txt записывается сводная информация, а в файле xml — среда и состояние выполнения тестового примера, что удобно для анализа и отображения программы.

содержимое txt-файла:

Язык кода:javascript
копировать
-------------------------------------------------------------------------------
Test set: com.qyf404.learn.maven.AppTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in com.qyf404.learn.maven.AppTest

содержимое xml-файла:

Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="com.qyf404.learn.maven.AppTest" time="0.001" tests="1" errors="0" skipped="0" failures="0">
  <properties>
    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
    <property name="sun.boot.library.path" value="/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/jre/lib"/>
    <property name="java.vm.version" value="24.75-b04"/>
    <property name="gopherProxySet" value="false"/>
    ...
  </properties>
  <testcase name="testAdd" classname="com.qyf404.learn.maven.AppTest" time="0.001"/>
</testsuite>

Заключение

Написал так много,По сутиmaven-surefire-plugin这个插件常использоватьиз都介绍Понятно.нодаmaven-surefire-pluginЕсть гораздо больше, чем это, что не было представлено.,Просто посмотрите на его элементы конфигурации.

再加上依据测试结果展现из测试报告Сразу更多Понятно.если想更加深入Понятно解可к到Официальный сайтизучать.

Адрес github примера кода: https://github.com/qyf404/learn-maven/tree/maven-surefire-plugin.

ссылка

Об авторе

pdfЗагрузка файла:http://pan.baidu.com/s/1c1corG8

Автор: Full stack программист, лидер стека,ПерепечаткаПожалуйста, укажите источник:https://javaforall.cn/167782.htmlИсходная ссылка:https://javaforall.cn

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose