【问题标题】:when to create objects using new operator or use auto-wire when testing a class?何时使用 new 运算符创建对象或在测试类时使用自动连线?
【发布时间】:2019-01-07 02:10:14
【问题描述】:

我要测试的类名为 UserService,带有 sendEmail 方法,它向用户发送电子邮件。要完成此任务,它依赖于 EmailService。现在,当编写一个测试用例来测试这个时 - 我应该创建 UserService userService = new UserService() 并模拟电子邮件服务还是创建上下文文件在我的测试类中定义 UserService bean 和 @Autowired UserService 并模拟 EmailService?这两种方法有什么区别,什么时候应该使用另一种?

【问题讨论】:

    标签: spring junit spring-test springjunit4classrunner


    【解决方案1】:

    我会这么说

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多