Как создать несколько трансформаторов отклика на Wiremock
Как я могу создать несколько трансформаторов на карданной подвеске? Я видел в документации, что вы можете вызывать два ответных преобразователя на одной заглушке, но я не уверен, как вы будете создавать второй ответный преобразователь и давать ему имя?
Так что это второй трансформатор, который я создал
public class test2 extends ResponseDefinitionTransformer{
String message;
boolean value;
@Override
public ResponseDefinition transform(Request rqst, ResponseDefinition rd, FileSource fs, Parameters prmtrs) {
message = rqst.getBodyAsString();
value = validateXMLSchema("xxx", message);
System.out.println("SECOND TRANSFORMER EXECUTED");
System.out.println("THIS IS THE CONDITION OF THE VALUE: " + value );
if(SchemaMatches){
return new ResponseDefinitionBuilder()
.withHeader("Content-Type", "application/xml")
.withStatus(200)
.withBody("XSD SCHEMA MATCHES")
.build();
}else{
return new ResponseDefinitionBuilder()
.withHeader("Content-Type", "application/xml")
.withStatus(404)
.withBody("MISMATCH")
.build();
}
}
@Override
public boolean applyGlobally() {
return false;
}
@Override
public String getName() {
return "tests";
}
}
Это первый преобразователь, который я создал:
public class Stub extends ResponseDefinitionTransformer {
@Override
public ResponseDefinition transform(com.github.tomakehurst.wiremock.http.Request rqst, ResponseDefinition rd, FileSource fs, Parameters prmtrs) {
message = rqst.getBodyAsString();
if(MandatoryFieldsExist){
return new ResponseDefinitionBuilder()
.withHeader("Content-Type", "application/xml")
.withStatus(200)
.withBody("MANDATORY FIELDS PRESENT ")
.build();
}
else{
return new ResponseDefinitionBuilder()
.withHeader("Content-Type", "application/xml")
.withStatus(404)
.withBody("MISMATCH")
.build();
}
}
@Override
public boolean applyGlobally() {
return false;
}
@Override
public String getName() {
return "example";
}
Наконец, это код моего основного метода для вызова преобразователя:
WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().port(8080).extensions(Stub.class, test2.class));
WireMock wireMockClient = new WireMock();
wireMockServer.start();
stubFor(post(urlEqualTo("/user/test"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("XML RECIEVED")
.withTransformers("example","tests")
)
);
1 ответ
Вместо ссылки на класс в wireMockServer, например: Stub.class используйте конструктор, например: new Stub(), new test2()
WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().port(8080).extensions(new Stub.(),new test2()));
WireMock wireMockClient = new WireMock();
wireMockServer.start();
stubFor(post(urlEqualTo("/user/test"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("XML RECIEVED")
.withTransformers("example","tests")
)
);