【发布时间】:2012-03-02 17:21:18
【问题描述】:
我是 Spring 框架的新手,对它使用 Spring Context 的依赖注入功能有疑问。
这是我要为其编写集成测试的类:
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>
有什么想法吗?
【问题讨论】:
-
你有多种测试方法,还是只有你粘贴的那个?
-
我有四种测试方法(我已经粘贴了其中的一种)。我得到三个失败的测试,说我已经分别调用了我要测试的方法 2、3 和 4 次。
标签: java spring unit-testing