何时使用新操作符创建obj,何时使用自动装配注释来测试类?

时间:2018-08-01 13:17:44

标签: java spring mockito spring-test

我要测试的类通过this.onChange = function (e: RiotEvent): void { const { item: { item }, target: { name, value } } = e; const index = this.opts.items.indexOf(item); tag.opts.items[index][name] = value; }; 方法称为UserService,该方法向用户发送电子邮件。

要完成此任务,它取决于sendEmail。现在,当编写测试用例进行测试时,我应该创建EmailService并模拟电子邮件服务,还是创建上下文文件,在其中定义UserService userService = new UserService() bean和在测试类中定义UserService并模拟@Autowired UserService

两种方法之间有什么区别?何时应该在另一种方法上使用?其中哪一个是真实物体?

1 个答案:

答案 0 :(得分:-1)

如果您的类打算作为Bean,并且例如,您还希望注入依赖项,则应该使用 new 运算符创建实例。请检查inject-doesnt-work-with-new-operator answer

您可以创建一个TestConfig.class并模拟UserService的依赖关系(使用您喜欢的模拟框架-我更喜欢mockito)。在此TestConfig中,您将创建bean:

@Configuration
 public static class TestConfig {

   @Bean
   private EmailService emailService() {
       return Mockito.mock(EmailService.class);
   }

   //Assuming that you have constructor injection.
   @Bean
   public UserService userService() {
     return new UserService(emailService());
   }
}