Чтобы кратко поделиться историей, я настраиваю модуль Sonarqube и отчеты о тестировании интеграции для многомодульного проекта Maven.Следуя примеру этого проекта , я смог получить покрытия как для юнит-тестов, так и для интеграционных тестовых линий, которые будут отслеживаться в комбинированном отчете и отображаться после локального запуска Sonarqube и запуска команды mvn clean install failsafe:integration-test sonar:sonar
.
Итак, это доказательство концепции на месте и работает хорошо, и теперь я хочу иметь возможность запускать интеграционные тесты, которые имеют зависимости, распределенные по различным дочерним модулям.У нас есть следующая (упрощенная) структура каталогов:
pom.xml (parent)
|--lambda
|----pom.xml
|--common
|----pom.xml
Например, у меня в проекте есть следующие фиктивные классы для проверки этого:
EmailDummy.java
package com.<PROJECT_NAME>.common.emailcomponents;
import com.<PROJECT_NAME>.<PRODUCT>.lambda.EmailDummyDependency;
public class EmailDummy {
public static int callDependency(int num) {
return EmailDummyDependency.absoluteVal(num);
}
}
EmailDummyDependency.java
package com.<PROJECT_NAME>.<PRODUCT>.lambda.authorizers;
public class EmailDummyDependency {
/**
* Return the absolute value of a number.
* @param num an integer
*/
public static int absoluteVal(int num) {
if (num > 0) {
return num;
} else {
return -num;
}
}
}
и интеграционный тест, в котором мы хотим проверить их взаимодействие:
EmailDummyIT.java
package com.<PROJECT_NAME>.mpa.tests;
import org.junit.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.<PROJECT_NAME>.common.emailcomponents.EmailDummy;
import org.junit.Before;
import org.junit.jupiter.api.TestInstance;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.modules.junit4.PowerMockRunner;
@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class EmailDummyIT {
private EmailDummy emailDummy = new EmailDummy();
@Before
public void before() {
/* TODO */
}
@Test
public void test1() throws Exception {
assertTrue(emailDummy.callDependency(-1) == 1);
}
@Test
public void test2() throws Exception {
assertTrue(emailDummy.callDependency(1) == 1);
}
}
Когда я запускаю команду mvn clean install failsafe:integration-test sonar:sonar
, я получаю следующую ошибку:
цензурированная часть изображения имеет то же значение, что и PROJECT_NAME в приведенных мной примерах кода.Если я поместил оба EmailDummyDependency.java и EmailDummy.java в одном и том же модуле, тесты будут работать отлично, но в отдельных модулях это не так и выдают вышеуказанную ошибку.