我要测试的类通过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
?
两种方法之间有什么区别?何时应该在另一种方法上使用?其中哪一个是真实物体?
答案 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());
}
}