При запуске всех тестов с помощью mvn test я получаю следующее:
[ERROR] Tests run: 26987, Failures: 0, Errors: 6, Skipped: 0
Это указывает на 6 ошибок в модульных тестах. Однако у меня наблюдаются два странных поведения:
- При удалении 6 тестов появляются еще 6 ошибок.
- При запуске отдельные тестовые классы с -Dtest, похоже, все они работают.
Полагаю, произошла какая-то утечка или конфликт, или что порядок выполнения этих тестов имеет значение. Однако моя цель – не устранить ошибки, а скорее получить согласованные результаты при различных способах компиляции. Мне также нужно получить ошибки с помощью -Dtest или добиться успеха при их всех запусках.
Похоже, что одна и та же версия Surefire используется в разных режимах выполнения тестов.
Все тесты являются частью общедоступных классов без аннотаций и выглядят следующим образом:
@Test
public void checkEndDate_validatesEndDateIsSet() {
// Create a mock object for Timestamp
Timestamp mockEndDate = Mockito.mock(Timestamp.class);
// Create an instance of PerformancePeriodVO
PerformancePeriodVO performancePeriod = new PerformancePeriodVO();
// Assign the mocked Timestamp object
performancePeriod.setEndDate(mockEndDate);
// Ensure that getEndDate returns a non-null value
Assertions.assertNotNull(performancePeriod.getEndDate(), "End date should not be null");
}
Следовательно, внутри теста создается экземпляр класса, и перед каждым тестом хешируется аннотация @Test. Показанный метод является одним из тех, которые возвращают ошибку InvalidUseOfMatchers.
POM содержит следующее:
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
Это единственное, что мне удалось найти по модульным тестам, но при необходимости я могу рассказать об этом подробнее.
Как вы могли бы заметили, этот проект был написан не мной, и я не являюсь опытным Java-разработчиком, поэтому надеюсь, что вопрос достаточно исчерпывающий
ОБНОВЛЕНИЕ
Как и просили, вот полный класс. В этом случае неудачным методом является getHash_testGetHashSameInstance в первой строке.
package it.dap.nw.commons.db;
import java.lang.reflect.Field;
import java.util.Hashtable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.mockito.Mockito;
public class PropertyOverrideTest {
@Test
public void getHash_testGetHashNotNull() {
Hashtable hashMock = Mockito.mock(Hashtable.class);
PropertyOverride.setHash(hashMock);
Hashtable result = PropertyOverride.getHash();
Assertions.assertNotNull(result);
}
@Test
public void getHash_testGetHashSameInstance() {
Hashtable hashMock = Mockito.mock(Hashtable.class);
try {
Field field = PropertyOverride.class.getDeclaredField("hash");
field.setAccessible(true);
field.set(null, hashMock);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
Hashtable result = PropertyOverride.getHash();
Assertions.assertEquals(hashMock, result, "Expected same instance of Hashtable");
}
@Test
public void setHash_testSetHashNotNull() {
Hashtable hashMock = Mockito.mock(Hashtable.class);
PropertyOverride.setHash(hashMock);
Assertions.assertEquals(hashMock, PropertyOverride.getHash());
}
@Test
public void setHash_testSetHashNull() {
Hashtable hashMock = Mockito.mock(Hashtable.class);
PropertyOverride.setHash(null);
Assertions.assertNull(PropertyOverride.getHash());
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -execution