Я пытаюсь использовать функцию Templating Response в WireMock, но, похоже, она не работает с примером кода, предоставленным в документации.
Это пример кусок кода:
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import io.restassured.RestAssured;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class WireMockTest {
@Rule
public WireMockRule wm = new WireMockRule(options()
.extensions(new ResponseTemplateTransformer(true)));
private WireMockServer wireMockServer;
@BeforeEach
public void setup() {
this.wireMockServer = new WireMockServer(
options().port(8081));
this.wireMockServer.stubFor(get(urlEqualTo("/test-url"))
.willReturn(aResponse()
.withBody("{{request.url}}")
.withTransformers("response-template")));
this.wireMockServer.start();
}
@Test
public void test() {
RestAssured.when()
.get("http://localhost:8081/test-url")
.then()
.log().ifError()
.body(Matchers.equalTo("/test-url"));
}
@AfterEach
public void tearDown() {
wireMockServer.stop();
}
}
Ожидаемый результат:
Тесты должны пройти. (то есть {{request.url}} должен быть заменен /test-url
в результате рендеринга шаблона).
Фактический результат:
....
java.lang.AssertionError: 1 expectation failed.
Response body doesn't match expectation.
Expected: "/test-url"
Actual: {{request.url}}
То, что я пробовал:
- Поскольку это тестовые случаи, использующие API JUnit 5, я не добавил
@Rule WireMockRule
, вместо этого добавил .withTransformers("response-template")
. - Попытался изменить тестовые случаи для использования JUnit 4 API и добавил
@Rule
public WireMockRule wm = new WireMockRule(options()
.extensions(new ResponseTemplateTransformer(false))
);
(вместе с withTransformers
)
3. Изменил WireMockRule
на
@Rule
public WireMockRule wm = new WireMockRule(options()
.extensions(new ResponseTemplateTransformer(true))
);
(вместе с трансформаторами)
4. Убрал withTransformers
, сохранив только WireMockRule
. (JUnit 4)
5. Я также пробовал вышеупомянутую комбинацию с JUnit 5. API.
Но ни один из вышеупомянутых вариантов не работал. Я что-то пропустил?