Похоже, ваш код отражения неверен. Используйте это утверждение вместо:
field.set(daoSpy, mySpecialMockedTemplate);
Однако, глядя на ваш тестовый код, кажется, что вы используете Spring для создания экземпляра MyDao
. Кажется странным использовать отражение для установки шаблона, почему бы не настроить его в Spring?
Или даже использовать реальный сеттер? Или сделайте поле защищенным, чтобы к нему мог получить доступ только тестовый модуль.
РЕДАКТИРОВАТЬ: Что касается инъекции, вы можете создать экземпляр DAO в вашем тесте и сделать ваш specialMockedTemplate
инъекцией Mockito. Вы могли бы написать что-то вроде:
@RunWith(MockitoJUnitRunner.class)
public class MyTestClass {
@InjectMocks private MyDao dao;
@Mock SpecialTemplate specialTemplate;
@Test void dao_should_call_the_template_with_parameter_A_and_B() {
// given
// when
dao.someCall("A", "B");
// then
verify(specialTemplate).someCallWith("A", "B");
}
}
Однако, несколько предупреждений, по возможности избегайте частичной насмешки (используя шпионов). Избегайте шутливых типов, которыми вы не владеете, вы должны прочитать эту запись в блоге почему это плохая идея.