Test- ресурсы зависимостей не в classpath?

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

my-root (pom)
    - my-logic
    - my-webapp (depending on my-logic)
    - my-consoleapp (depending on my-logic)

Мои тестовые классы наследуются от AbstractTransactionalJUnit4SpringContextTests и используют @ContextCofiguration для настройки ApplicationContext .

Например, тестовый класс для Spring Controller:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { 
  "classpath:applicationContext-logic-test.xml",
  "classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {

  @Autowired
    private ApplicationContext applicationContext;
    ...
}

Как видите, в каждом модуле есть XML-файл конфигурации. У меня есть отдельные конфиги для тестирования, находящиеся в test / resources каждого модуля (и дополнительно имеющие суффикс "-test"). Это все работает (класс компилируется, запускается и тесты JUnit успешны) , если я запускаю тест JUnit в Eclipse.

Теперь моя проблема: Запуск теста с использованием Maven НЕ будет работать ! (например, с помощью «Запуск от имени»> «Установка Maven» в my-root (я использую m2eclipse)). В частности, он выдаст следующее исключение:

java.io.FileNotFoundException: ресурс пути к классу [applicationContext-logic-test.xml] не может быть открыт, потому что он не существует`

Кажется, что Maven не добавляет файлы из my-logic / src / test / resources в classpath, который устанавливается при запуске модульных тестов my-webapp .

Как это исправить?

14
задан Cœur 4 December 2018 в 06:43
поделиться

2 ответа

Похоже, что Maven не добавляет файлы из my-logic/src/test/resources в путь к классам, настроенный при запуске модульных тестов my-webapp.

Нет, это не так. Во-первых, Maven использует бинарные зависимости, которые всегда разрешаются через локальный репозиторий. И во-вторых, бинарные зависимости не включают тестовый материал.

Но вы можете сделать следующее:

  1. настроить модуль my-logic для создания тестового JAR-файла, используя jar:test-jar
  2. настроить my-webapp модуль для зависимости от этого тестового JAR (используя область test).

Для #1 вам нужно настроить плагин Maven Jar в файле pom.xml my-logic:

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.2</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

И Maven создаст JAR с содержимым target /test-classes во время package и установить/развернуть его.

Для №2 объявите зависимость от тестового JAR-файла в pom.xml my-webapp:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

Это должно сработать.

14
ответ дан 1 December 2019 в 14:10
поделиться

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

Если вы хотите выполнить то, что пытаетесь сделать, вам следует создать проект, содержащий ресурсы, необходимые для тестирования, и сделать его тестовой зависимостью как от my-logic, так и от my-webapp

1
ответ дан 1 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: