2014-08-27 2 views
1

У меня есть мульти проект модуль Maven (ModuleA, ModuleB, ModuleC)дело с пути в Eclipse, и Maven

У меня есть тест в ModuleA

@ContextConfiguration(locations = 
      { "file:../ModuleB/src/test/resources/application-context-test.xml", 
      "classpath:/mvc-dispatcher-servlet-test.xml" 
      }) 

что контекст загрузки из файла в ModuleB.

Когда я запускаю тест в eclipse, он работает. Но не тогда, когда тест управляется maven.

В eclipse текущий путь установлен на ModuleA, но в maven он установлен в родительской папке.

, так что я должен написать:

файл: . /ModuleB/src/test/resources/application-context-test.xml

INSEAD из

файл: ../ModuleB/SRC/тест/ресурсы/прикладного context- test.xml

сделать это работает в мавена (но это нарушило бы затмение)

спасибо!

Как я могу указать maven (или плагин верфи) для запуска модульного теста относительно пути к модулю, а не родительского?

+0

Почему бы не использовать 'classpath' вместо' file'? –

+0

Я пробовал: «classpath: /application-context-test.xml», но кажется, что этот файл не находится в пути к классам. Может быть, если я переведу его из ModuleB/src/main/resources /, он будет в пути к классам ... – jpprade

+0

Aggh ... Пропустил, что он находится в тестовой папке. –

ответ

0

Добавить это, а не прямой слэш - "classpath:application-context-test.xml"

Maven будет автоматически вытащить его из ресурсов

+0

Я не пробовал в maven, но в eclipse он не может найти его, мне нужно решение, которое работает как в – jpprade

0

Независимо от того, что sotution есть, это не лучший pratice.

Пожалуйста следующим образом:

Во-первых, убедитесь, что если модуль А denpends модуль B? (Я думаю, да)

Если да, используйте classpath:/application-context-test.xml, затем используйте mvn install под родительским каталогом, чтобы упаковать модуль B и установить его. то вы можете запустить тестовые примеры, это должно сработать.

Если нет, скопируйте application-context-test.xml в модуль A, но я думаю, что это странно. обычно, если вы хотите использовать файл другого модуля, это потому, что этот модуль зависит от него.

+0

. Да, копирование файла - это то, что я буду заканчивать. Но в последнюю надежду я сделал: обновить surefire plug-in от 2.16 до 2.17 и удалить , чтобы иметь значение по умолчанию, и теперь это похоже на работу: | – jpprade

1

Файлы, помещенные в ${project.basedir}/src/test/resources, копируются в ${project.build.testOutputDirectory}, что является «целевым/тестовым классами» по умолчанию. Maven делает это автоматически как часть фазы generate-testResources.

Таким образом, вы не хотите искать файл в каталоге/src/test/resources, поскольку это не относится к пути к классам. Если у вас есть тест в ModuleB ищет файл, можно было бы написать так:

@ContextConfiguration(locations = 
     { "classpath:/application-context-test.xml", 
     "classpath:/mvc-dispatcher-servlet-test.xml" 
     }) 

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

1: Выполнить maven jar plugin's test-jar goal в ModuleB. Это займет все классы и ресурсы в каталоге ModuleB target/test-classes и упакуйте его в банку. Затем, вы можете добавить тестовую банку в качестве зависимости в POM модуль А как это:

<dependency> 
    <groupId>com.mycompany.theGroupId</groupId> 
    <artifactId>moduleB</artifactId> 
    <version>yourVersion</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

Два: Вы можете перемещать тестовые ресурсы Модуль B в отдельный проект (в каталоге newProject/src/main/resources), пусть Maven построить банку как обычно, и имеют как ModuleA, так и ModuleB add newProject как зависимость с областью test.