如何在 junit 中测试实际服务,而不是模拟服务?自动连线不起作用

问题描述 投票:0回答:1

如果你有 Spring Boot 服务,如何测试它?

您可以编写联合测试,但这不起作用:

public class myServicetest() {

   @Autowired
   private MyService myservice;

   @Test
   public void myTest() {
       myService.myMethod()
}

我猜测当您运行实际应用程序时,spring 将执行所有 @Autowired 注入。 我猜junit对spring一无所知。 这是否意味着您无法测试 Spring 服务(不是模拟版本)?

我也尝试过这个:

@Test
public void myTest() {
       MyService myService = new MyServiceImpl();
       myService.myMethod()
}

但这也不起作用,大概是因为MyService也有几次注入,并且使用了feign。

使用junit来测试实际的服务代码是错误的策略吗? 还有哪些其他选择? 可能是:

  1. 提供有关单元测试的 spring 配置的一些方法。
  2. 写一个新的main? 当前的 main 是这样做的: {SpringApplication.run(Main.class, args);} 不确定如何让它调用我的测试类(无入口点)
  3. 创建一个基于 Web 的 API 来调用正在运行的服务器上的测试类。我想尽可能避免这种情况,部分是因为启动服务需要很长时间,部分是因为安全性不允许后端服务上有任何API(由kafka或数据库事件等触发)
spring-boot junit
1个回答
0
投票

您必须在测试类中使用@SpringBootTest注释。更多信息请参见此处https://spring.io/guides/gs/testing-web

© www.soinside.com 2019 - 2024. All rights reserved.