2017-02-03 42 views
2

Я новичок в Spring Boot, и мне очень нравится, особенно когда дело доходит до устранения шаблона кода. я создал тестовый класс, чтобы проверить мой @RestController:Как отлаживать приложение Spring Boot от SpringBootTest

@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()); 
} 
} 

Если я запустить его в режиме отладки, я могу только отладить класс 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; 
} 

У меня есть попытался настроить порт отладки Tomcat, но не повезло. Единственный способ, которым я могу отлаживать свой @RestController, - запустить его в режиме отладки и вызвать мой RestAPI из браузера, но я хочу использовать свой модульный тест. Заранее спасибо.

ответ

0

Возможно, вы работаете на другом порту, который вы считаете собой.

Аннотации SpringBootTest - это то, что контролирует тестовый порт, например.

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) 
+0

Можете ли вы объяснить, как отладить RestController? Я перешел на SpringBootTest.WebEnvironment.DEFINED_PORT, вы предложили, но все же пропустите точки торможения. – carlitos081

+0

В вашей настройке отладка должна работать нормально. Одна вещь, которую нужно проверить, - это то, что ваш звонок для отдыха будет на сервере, который вы так считаете. У вас есть другие запущенные экземпляры, которые не находятся в режиме отладки? заставляет порт быть чем-то отличным от нормы, например. server.port = 9123 в application.properties/yaml, затем выполните netstat, чтобы проверить, что он запущен и запущен при запуске теста. Также попробуйте поставить точку останова на линии в методе postConstruct, чтобы убедиться, что вы нажимаете приложение, которое вы запускаете в тесте. – PaulNUK

+1

Я нахожусь в правильных сервисах, потому что это @SpringBootTest, который запускает службу для вызова, проблема в том, что из Intellij, если я запускаю тестирование модуля в режиме отладки, он запускает тест в отладке, но не в службе – carlitos081

0

В Ури вы добавления http://local хоста + порт, который не является необходимым, testRestTemplate делает это для вас. Удалите это и попробуйте, вы можете попасть в точку отладки

+0

Если это не помогает, дайте мне знать, я отвечаю через мобильный. Пошлют от ПК завтра – rajadilipkolli