在每个单元测试后创建一个新的 Bean 实例
我是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>
有什么想法吗?