У меня есть класс А, который использует 3 классов с различноКак использовать @InjectMocks вместе с @Autowired аннотации в JUnit
автоматического связыванияpublic class A() {
@Autowired
private B b;
@Autowired
private C c;
@Autowired
private D d;
}
Во время тестирования их, я хотел бы иметь только 2 классов (B & C), как издевается и имеют класс D, чтобы быть Autowired в нормальном режиме, этот код не работает для меня:
@RunWith(MockitoJUnitRunner.class)
public class aTest() {
@InjectMocks
private A a;
@Mock
private B b;
@Mock
private C c;
@Autowired
private D d;
}
возможно ли это сделать?
Есть ли способ, которым я могу продолжать использовать @RunWith (MockitoJUnitRunner.class) и решить эту проблему? приведенный выше код является лишь частью более крупного тестового класса, и я не могу изменить способ запуска junits – USer22999299
Да, вы можете, но в этом случае вы не можете использовать 'Autwired', тогда вам нужно вручную ввести код для инициализации весеннего контекста загрузить экземпляр из 'A' –
Существует случай, когда этот подход не будет работать: когда' A' аннотируется с помощью '@ Transactional' (или имеет методы, аннотированные с помощью' @ Transactional'); см. http://stackoverflow.com/questions/12857981/transactional-annotation-avoids-services-being-mocked и http://stackoverflow.com/questions/21124326/how-to-inject-mock-into-service-that -has-transactional –