我刚接触Spring框架,对于它在Spring上下文中使用的依赖注入功能有疑问。
这是我正在尝试为其编写集成测试的类:
public class UserService {
private Validator validator;
private UserRepository userRepository;
private Encryptor encryptor;
private MailService mailService;
...
public void registerUser(User user) {
user.setPassword(encryptor.encrypt(user.getPassword()));
Errors errors = new BindException(user, "user");
validator.validate(user, errors);
if (errors.getErrorCount() == 0) {
userRepository.addUser(user);
mailService.sendMail(user.getEmail());
}
}
在我的测试中(使用 Mockito),我想要确保四个项都被调用,因此我创建了以下的测试:
public void testRegisterCallsValidateInValidator() {
userService.registerUser(testUser);
verify(userService.getValidator(), times(1)).validate(any(User.class), any(Errors.class));
}
所有测试都失败,提示我多次调用了该方法。我的猜测是,在所有测试开始时只创建一次UserService bean,但在每个测试结束后没有重新加载。
在我的测试配置中,我使用以下xml文件来决定要注入哪些bean:
<bean id="userService" class="be.kdg.coportio.services.UserService">
<property name="validator" ref="validator"/>
<property name="userRepository" ref="userRepository"/>
<property name="encryptor" ref="encryptor"/>
<property name="mailService" ref="mailService"/>
</bean>
有什么想法吗?