gpt4 book ai didi

java - 何时使用 new 运算符创建 obj 以及何时使用 Autowiring 注释来测试类?

转载 作者:行者123 更新时间:2023-12-01 06:03:26 24 4
gpt4 key购买 nike

我想要测试的类名为 UserService ,具有 sendEmail 方法,该方法向用户发送电子邮件。

要完成此任务,它依赖于 EmailService。现在,当编写一个测试用例来测试这一点时 - 我应该创建 UserService userService = new UserService() 和模拟电子邮件服务还是创建上下文文件定义 UserService bean 和 @在我的测试类和模拟 EmailService 中自动连接 UserService

这两种方法有什么区别?我什么时候应该使用其中一种而不是另一种?其中哪一个是真实的物体?

最佳答案

如果您的类是一个 bean,并且例如您还希望注入(inject)依赖项,则您不应该使用 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());
}
}

关于java - 何时使用 new 运算符创建 obj 以及何时使用 Autowiring 注释来测试类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51634344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com