WireMock: Stubbing - Невозможно правильно реализовать метод «AssertThat» - PullRequest
0 голосов
/ 24 апреля 2018

Я изо всех сил пытаюсь создать простую заглушку. Я следил за онлайн-учебником, но не смог решить проблему, с которой столкнулся. В частности, метод «Get» в AssertMethod доставляет мне много проблем. Я не знаю, как решить это.

public class WeatherApplicationTest {


    @Rule
    public WireMockRule wireMockRule = new WireMockRule();
    public  WireMockServer wireMockServer = new WireMockServer(); //No-args constructor will start on port 8080, no HTTPS



    @BeforeClass
    public  void setUpClass() {
        wireMockServer.start();
    }

    @AfterClass
    public  void tearDownClass() {
        wireMockServer.stop();
    }


    @Test
    public void statusMessage() throws IOException{

        wireMockRule.stubFor(get(urlEqualTo("/some/thing"))
        .willReturn(aResponse()
        .withStatus(200)
        .withStatusMessage("Everything is fine")
        .withHeader("Content-Type", "Text/Plain")));

        HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("http://localhost:" + wireMockServer.port() + "/some/thing");
        HttpResponse response = client.execute(request);

        assertThat(response.GET("/some/thing").statusCode(), is(200));


}
}

Я получаю сообщение об ошибке в следующей строке:

    assertThat(response.GET("/some/thing").statusCode(), is(200));

Метод GET подчеркнут красным цветом.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Мой вклад в этот вопрос: этот Java-тест выполняется без исключений, как в IDE, так и в Maven, а также, кроме того, с другими тестами, потому что в конце он отключает фиктивный сервер и не создавать конфликты с другими серверами, работающими в других тестах.

import com.github.tomakehurst.wiremock.WireMockServer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import wiremock.org.apache.http.HttpResponse;
import wiremock.org.apache.http.client.HttpClient;
import wiremock.org.apache.http.client.methods.HttpGet;
import wiremock.org.apache.http.impl.client.DefaultHttpClient;

import java.io.IOException;

import static com.github.tomakehurst.wiremock.client.WireMock.*;


@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class KatharsisControllerTest {

    private static WireMockServer mockedServer;
    private static HttpClient client;

    @BeforeClass
    public static void setUpClass() {

        mockedServer = new WireMockServer();
        mockedServer.start();
        client = new DefaultHttpClient();

    }

    @AfterClass
    public static void tearDown() {
        mockedServer.stop();
    }

    @Test
    public void test_get_all_mock() {


        stubFor(get(urlEqualTo("/api/Payment"))
                .willReturn(aResponse()
                        .withHeader("Content-Type", "application/vnd.api+json;charset=UTF-8")
                        .withStatus(200)
                        .withBody("")


                ));


        HttpGet request = new HttpGet("http://localhost:8080/api/Payment");
        try {
            HttpResponse response = client.execute(request);
            assert response.getStatusLine().getStatusCode() == 200;

        } catch (IOException e) {
            e.printStackTrace();
        }


    }


}
0 голосов
/ 24 апреля 2018

Документация WireMock не очень хорошо объясняет, как с ней связаться (но, в их защиту, это не совсем в их части).

Как я избегал в комментариях, HttpResponse не содержит метод GET(), поэтому вы получаете «красное подчеркивание» (IE: ошибка).

Итак, мы знаем, что ищемсделать утверждение против кода состояния.Если мы посмотрим на Javadoc класса HttpResponse, то есть класс StatusLine, который можно извлечь из getStatusLine() из HttpResponse, и Javadoc этогоКласс показывает, что он содержит метод getStatusCode().Объединяя эту информацию в вашем ответе, утверждение должно быть обновлено до:

assertThat(response.getStatusLine().getStatusCode(), is(200));

Кроме того, как отметил Том в комментариях, удалите WireMockServer (а также start/stop иgetPort() звонки; вы можете получить порт из вашего правила. И метод stubFor(...) должен вызываться статически (не как часть правила).

...