Ответ 1
При использовании surefire для запуска модульных тестов он обычно запускает новую JVM для запуска тестов, и мы должны передавать информацию в новую JVM. Это можно сделать обычно с помощью тега "systemPropertyVariables".
Мне удалось реализовать это с помощью Java-проекта с быстрым запуском, где я добавил это в POM:
Я объявил следующие профили
<profiles>
<profile>
<id>special-profile1</id>
</profile>
<profile>
<id>special-profile2</id>
</profile>
</profiles>
И это для правильной конфигурации:
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<systemPropertyVariables>
<profileId>${project.activeProfiles[0].id}</profileId>
</systemPropertyVariables>
</configuration>
</plugin>
...
</plugins>
</build>
И в моем unit test я добавил следующее:
/**
* Rigourous Test :-)
*/
public void testApp()
{
System.out.println("Profile ID: " + System.getProperty("profileId"));
}
При вызове команды "test" без профиля (т.е. с помощью mvn test
) я получил следующее:
------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.fxs.AppTest Profile ID: development Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in com.fxs.AppTest Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
И я использовал mvn -P special-profile2 test
, я получил это
------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.fxs.AppTest Profile ID: special-profile2 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec - in com.fxs.AppTest Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Это будет проходить по имени первого активного профиля. Если у нас есть потенциально более одного активного профиля, то нам, вероятно, придется использовать больше системных свойств.
Примечание. Я проверил это, используя Maven 3.1.1