Есть ли способ внедрить объекты без издевательств с помощью @InjectMocks?
Моя установка имеет UserSignupService с зависимостями от MailService и UserRepository (репозиторий данных Spring). У меня есть модульный тест, создающий шпиона MailService, и я аннотировал UserSignupService с помощью @InjectMocks. К сожалению, это не будет внедрять UserRepository (не издевательский) в класс обслуживания. Объединение @InjectMocks с @Autowired приведет не к внедрению фиктивного MailService, а к bean-компоненту из контекста приложения.
MockitoAnnotations.initMocks() запускается в AbstractServiceTest.setUp(). Этот класс также содержит конфигурацию модульного теста (SpringJunit4TestRunner и т. д.)
public class UserSignupServiceTest extends AbstractServiceTest {
@Autowired @Spy
private MailService<UserActivationMail> mailService;
@InjectMocks
private UserSignupServiceImpl service;
@Before
public void setUp() throws Exception {
super.setUp();
}
}
@Service
public class UserSignupServiceImpl implements UserSignupService {
private final UserRepository repository;
private final MailService<UserActivationMail> mailService;
@Autowired
public UserSignupServiceImpl(UserRepository repository,
MailService<UserActivationMail> mailService) {
this.repository = repository;
this.mailService = mailService;
}
//methods...
}