Здесь нет ответа.Я не мог дать больше, потому что мне очень жаль видеть, что так много людей используют этот неуклюжий API, полагаясь на рефлексию, в то время как вы могли бы сделать вещи, действительно понятные для читателей класса, явно установив зависимость.
Дело в том, что мой тест не выдает никаких исключений, но он не вводит мой фиктивный объект
Не удивительно.Этот способ впрыскивания макета остается тихим, даже если инъекция не удалась. Из InjectMocks
javadoc (выделение не мое!):
Mockito будет пытаться внедрить mock только путем инжекции конструктора, инжектора сеттера или свойства в порядке икак описано ниже.Если какая-либо из следующих стратегий потерпит неудачу, Mockito не сообщит о неудаче; , то есть вам придется самостоятельно предоставлять зависимости.
Хотя Mockito не сообщает о сбое, я действительно не рекомендую использовать этот API.
По поводу вашей реальной проблемы посмотрите на это:
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
Вы аннотируете поле с помощью аннотаций Spring и Mockito.Вы чувствуете себя комфортно с порядком их обработки?Они приходят из двух разных библиотек.Я не говорю, что это никогда не сработает (удача и случайность существуют), но вы действительно думаете, что это надежно?
Чтобы выполнить ваше требование, вы могли бы написать что-то подобное, что делает вещи в два явных шага:
- создание объектов: макетирование зависимости и вставка пружинной зависимости
- набор отношений: между ложной зависимостьюи пружинная зависимость
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION)
public class REjercicioDAOTest extends ATest {
@Mock
private ICustomFileHandler customFileHandler;
@Autowired
private IREjercicioDAO rEjercicioDAO;
@Before
public void before () {
MockitoAnnotations.initMocks(this);
// Set explicitly the fileHandler dependency
rEjercicioDAO.setFileHandler(customFileHandler);
}
}