【发布时间】:2013-12-19 09:24:33
【问题描述】:
有没有办法用@InjectMocks 注入非模拟对象?
我的设置有一个 UserSignupService 依赖于一个 MailService 和一个 UserRepository(一个 Spring 数据存储库)。我有一个创建MailService 的间谍的单元测试,我用@InjectMocks 注释了UserSignupService。遗憾的是,这不会将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...
}
【问题讨论】:
-
您是否尝试在带有 Autowired 和 Spy 注释的 UserRepository 的测试类中设置一个字段?
-
是的,这确实有效,但我不想在测试中声明每个依赖项。
标签: java spring unit-testing mockito spring-data