什么时候使用新的运算符创建对象或在测试类时使用自动装配?

时间:2018-07-30 18:55:08

标签: spring junit spring-test springjunit4classrunner

我要测试的类称为具有sendEmail方法的UserService,它将向用户发送电子邮件。要完成此任务,它取决于EmailService。现在,当编写测试用例进行测试时,我应该创建UserService userService = new UserService()并模拟电子邮件服务,还是创建上下文文件,在其中定义UserService bean,并在测试类和模拟EmailService中定义@Autowired UserService ?两种方法之间的区别是什么?何时应该使用另一种方法?

1 个答案:

答案 0 :(得分:0)

我会说

单元测试的目的是,您只需使用UserService创建new并注入模拟即可。在这种情况下,使用spring ioc container不会有任何区别,除了测试会变慢之外,因为它们不仅会创建单个类,还会启动spring容器。

但是,如果您的应用程序使用spring,则还需要以某种方式对其进行测试,并且对于集成测试,使用旋转弹簧上下文的方法非常有效。在这种测试中,您将测试spring上下文是否可以启动以及bean是否已正确注入。但是,通常在这种测试中,人们尝试用伪造的端点替换真实的服务,从而相应地更改属性文件。例如。 :

将消息发送到某个队列-在docker中运行您自己的队列并将其用于测试。

保存一些信息到数据库-在docker中运行您自己的数据库或运行一个内存。

击中一些HTTP端点-在docker中运行Wiremock并模拟任何类型的响应,模拟连接失败等。