如何从SpringBootTest调试Spring Boot应用程序

car*_*081 6 debugging spring-boot spring-boot-test

我是Spring Boot的新手,我真的很喜欢它,尤其是在消除样板代码时。我创建了一个测试类来测试我的@RestController:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = NewBusinessRevitalizationApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource(properties = {"management.port=0"})
public class NBRControllerTest extends TestCase {

@LocalServerPort
private int port;

@Value("${local.management.port}")
private int mgt;

@Autowired
private TestRestTemplate testRestTemplate;

@Test
public void getApplicationByAgencyIdAndStatusTest() {
    String uri = "http://localhost:" + this.port + "/nbr-services/applications/{status}?agencyIds=123456,56765,678576";
    Map<String, String> vars = new HashMap<String, String>();
    vars.put("status", "SAVED");
    ResponseEntity<String> response = testRestTemplate.getForEntity(uri, String.class, vars);
    assertEquals(HttpStatus.OK, response.getStatusCode());
}
}
Run Code Online (Sandbox Code Playgroud)

如果以调试模式运行它,则只能调试Test类,而不能调试@RestController类:

@RestController
@RequestMapping("/nbr-services")
public class NBRController {

@Autowired
private NBRServices nbrServices;

private static Logger logger = LoggerFactory.getLogger(NBRController.class);

@RequestMapping(value = "/configuration/environment/{environment}", method = RequestMethod.GET)
@ResponseBody
public String getConfiguration(@PathVariable("environment") String environment) throws RemoteException {
    logger.debug("environment={}", environment);
    String result = nbrServices.getConfiguration(environment);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我试图设置Tomcat调试端口,但没有运气。调试@RestController的唯一方法是在调试模式下运行它,然后从浏览器调用RestAPI,但我想使用单元测试。提前致谢。

Pau*_*NUK 0

您可能正在与您认为的端口不同的端口上运行。

SpringBootTest注释是控制测试端口的,例如

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
Run Code Online (Sandbox Code Playgroud)

  • 您找到这个问题的答案了吗? (3认同)