У меня есть проект со следующей структурой
src
|_ main
| |_ java
| |_ com.company.product
| |_ packageA
| |_ packageB
|_ test
|_ java
|_ com.company.product
|_ packageA
|_ packageB
При выполнении mvn test
мои тесты в packageA проходят, и тесты в packageB дают сбой.При запуске mvn test -Dtest="com.company.product.packageB.**"
тесты в packageB проходят.Кроме того, запуск mvn test -Dtest="com.company.product.**"
также не проходит тесты packageB, но не тесты packageA. Почему mvn test
не проходит все тесты, которые должны пройти?
Подробная информация о тестах в packageB:
@Test
void createNew() {
String user = "testUser";
//This calls a third party API that is throwing a
//InvocationTargetException when running packages together
Connection connect = new Connection(user);
String resultText = connect.getResultText();
assertNotNUll(connect);
assert (resultText).equals("Process Complete");
}
Jar-файл, необходимый для запуска стороннего вызова APIвключен в pom следующим образом.
<dependency>
<groupId>com.third.party.api</groupId>
<artifactId>third-party-api</artifactId>
<version>1.0.0</version>
</dependency>
Использование Java 1.8.0_74 и Maven 3.5.4.
РЕДАКТИРОВАТЬ: Ошибка, возвращаемая Maven:
createNew() Time elapsed: 0.001 sec <<< ERROR!
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.company.product.packageB.MyTest.createNew(MyTest.java:11)
Caused by: java.lang.reflect.InvocationTargetException
at com.company.product.packageB.MyTest.createNew(MyTest.java:11)
Caused by: java.lang.RuntimeException: Error when creating RpcClientStub. Cause : java.lang.NoClassDefFoundError: Could not i
nitialize class com.third.party.apitransport.session.ArRpcCallContext
at com.company.product.packageB.MyTest.createNew(MyTest.java:11)
...
Results :
Tests in error:
MyTest.createNew:11 » Runtime java.lang.reflect.InvocationTargetEx...
MyTest.createAndUpdate:29 » Runtime java.lang.reflect.Invocation...
MyTest.connect:51 » Runtime java.lang.reflect.InvocationTarget...
Tests run: 9, Failures: 0, Errors: 3, Skipped: 0
РЕДАКТИРОВАТЬ: Исправление заключалось в добавлении очистки, как Иван указал в комментариях.
private static String systemOsName;
@BeforeAll
public static void setOsName(){
systemOsName = System.getProperty("os.name");
}
...
@AfterAll
public static void cleanup(){
Constants.setFilePathSeparator("");
System.setProperty("os.name",systemOsName);
}