有没有办法用@InjectMocks注入非模拟对象?
我的安装程序有一个UserSignupService,它依赖于MailService和UserRepository(一个Spring Data Repository) . 我有一个单元测试创建了一个MailService的 Spy ,我用@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...
}
1 回答
你需要初始化你的Mockito
MockitoAnnotations.initMocks(this);
这是我的Spring JUnit测试类示例