Intellij Idea Sping Boot Test中的RestController中未命中调试点

qxsslcnc  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我是Spring Boot的新手,我使用IntelliJ IDEA 2022.3.3创建了Hello World REST API(Ultimate Edition)+ maven和一个集成测试来命中hello结束点。测试正确通过,但调试没有命中Rest-controller中的hello结束点。我不想模拟任何东西。我从测试本身开始调试。为什么调试点在hello中()方法没有命中,即使它给出了正确的返回值。它与任何调试器设置有关吗?我已经在github上上传了完整的项目
https://github.com/codecompilelink/HelloWorld.git

package example.com.helloworld;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController

public class IAmController {

    @GetMapping("/hello")
    public String hello()
    {
       System.out.println("Hello there...hello I got hit but not in the debugger");
       return "Hello World";
    }
}

测试类如下所示

package example.com.helloworld;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.web.client.RestTemplate;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HttpResponseTest {
    @LocalServerPort
    int port;
    private static RestTemplate restTemplate;
    @BeforeAll
    public static void init() {
        restTemplate = new RestTemplate();
    }

    @Test
    public void shouldPassIfStringMatches()
    {
        String result = restTemplate.getForObject("http://localhost:"+port+"/hello",String.class);
        assertEquals("Hello World", result);
    }
}

**更新:**我能够通过使用eclipse IDE进行排序,控制器中的断点与运行测试的线程不同。Eclipse做得很好,我使用的上面提到的IntelliJ版本不会在测试方法中从下一行到下一行时遇到控制器hello()方法中的断点,并填充结果变量(跳过hello()方法断点)

restTemplate.getForObject("http://localhost:"+port+"/hello",String.class);

如果我不走过去,而是按下Go,那么它会碰到控制器中的hello()中的断点。

相关问题