Первый шаг - ответить на этот вопрос: тестирую ли я модульное тестирование кода в своем классе или тестирую интеграцию сочетания Spring и некоторого набора кода, который включает в себя мой класс?
Если вы тестируете модульваш код, тогда не нужно, чтобы Spring делал свое дело.Вместо этого вам нужно только создать экземпляр вашего класса, установить значения, которые Spring установил бы для вас, выполнить тестируемый метод, а затем убедиться, что ваш метод выполнен правильно.
Вот ваш примерный тестовый модуль, переписанный какЯ предложил:
public class TestA
{
private static final String VALUE_ABC = "VALUE_ABC";
private A classToTest;
@Test
public void testFoo()
{
classToTest.foo();
}
@Before
public void preTestSetup()
{
classToTest = new A();
ReflectionTestUtils.setField(
classToTest,
"abc",
VALUE_ABC)
}
}
Некоторые примечания:
ReflectionTestUtils
является частью Spring-теста. - Вам не нужно использовать
@InjectMocks
потому что у вас нет шуток для инъекций. - Я не знаю, что такое
sout
, поэтому я исключил его из теста.Вы должны убедиться, что метод sout был вызван с правильным значением (в данном случае VALUE_ABC). - Если вы просто тестируете свой код модулем, вам не нужен Spring, что означает, что вам не нужноиспользовать аннотацию
@RunWith
.