Я новичок в модуле модульного тестирования Спока. Я умею писать тестовые примеры, используя Спок для простой логики. Теперь я пишу то же самое для Rest API.
Я использую RestTemplate Spring для выполнения запросов GET и POST. Я видел номер примера в Google для запроса GET (например, WireMock). Но недостаточно информации, чтобы дать разъяснения о том, как писать тестовые случаи для запросов POST.
Вот мой пример кода, который написан на Junit. Я должен преобразовать то же самое в Спока (я могу это сделать).
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.client.RestTemplate;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
@RunWith(SpringJUnit4ClassRunner.class)
@AutoConfigureMockMvc
@ActiveProfiles(value = "integration")
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class LocalControllerTest {
@Rule
public WireMockRule wireMockRule = new WireMockRule(9999);
@Before
public void setUp() {
mockRemoteService();
}
@Test
public void testLocalServiceWithMockedRemoteService() throws Exception {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:8080/localService", String.class);
org.junit.Assert.assertEquals("Input : request from client endpoint, Message : mocked remote service response", response.getBody());
}
private void mockRemoteService() {
stubFor(get(urlEqualTo("/remote"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("remoteServiceResponse.json")));
}
}
Основная проблема заключается в том, что, хотя я и писал тестовые случаи, вызов на самом деле происходит со службой (которая находится на моем локальном хосте) что я не ожидаю, чтобы это произошло. Есть ли способ локально макетировать данные и вызывать фиктивную конечную точку для запроса POST, используя платформу Spock? Я не знаю много о том, чтобы издеваться над фиктивной конечной точкой.
Ваша помощь высоко ценится.
Спасибо.