我要测试的类称为具有sendEmail方法的UserService,它将向用户发送电子邮件。要完成此任务,它取决于EmailService。现在,当编写测试用例进行测试时,我应该创建UserService userService = new UserService()并模拟电子邮件服务,还是创建上下文文件,在其中定义UserService bean,并在测试类和模拟EmailService中定义@Autowired UserService ?两种方法之间的区别是什么?何时应该使用另一种方法?
答案 0 :(得分:0)
我会说
单元测试的目的是,您只需使用UserService
创建new
并注入模拟即可。在这种情况下,使用spring ioc container
不会有任何区别,除了测试会变慢之外,因为它们不仅会创建单个类,还会启动spring容器。
但是,如果您的应用程序使用spring
,则还需要以某种方式对其进行测试,并且对于集成测试,使用旋转弹簧上下文的方法非常有效。在这种测试中,您将测试spring上下文是否可以启动以及bean是否已正确注入。但是,通常在这种测试中,人们尝试用伪造的端点替换真实的服务,从而相应地更改属性文件。例如。 :
将消息发送到某个队列-在docker中运行您自己的队列并将其用于测试。
保存一些信息到数据库-在docker中运行您自己的数据库或运行一个内存。
击中一些HTTP端点-在docker中运行Wiremock并模拟任何类型的响应,模拟连接失败等。