java – 在每次单元测试后创建一个bean的新实例
发布时间:2020-12-15 02:47:27 所属栏目:Java 来源:网络整理
导读:我是 spring框架的新手,并且使用 Spring Context对其依赖注入功能有疑问. 这是我正在尝试编写集成测试的类: public class UserService {private Validator validator;private UserRepository userRepository;private Encryptor encryptor;private MailServi
我是
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> 有任何想法吗? 解决方法
要明确区分单元和集成测试(跳过关于每个类别的含义的争论) – 您可以通过两种方式测试您的服务:
>通过集成测试 – 启动整个Spring Context并将服务作为单例bean进行测试. 我的建议是不要混合Spring和模拟如果你可以帮助它 – 保持Mockito进行单元测试(这是你需要的东西)并使用集成测试来引导整个Spring上下文来测试其他东西 – 持久性问题,交易等 你不需要Spring来模拟一个类的协作者,并与Mockito进行简单的交互测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |