Ich verwende Play Framework und verwende Java als Sprache der Wahl. Ich habe einen Controller, der einen REST-Anruf an einen externen Dienst macht. Ich beabsichtige, den externen Dienst zu verspotten, so dass ich die Funktionalität meines Controllers testen kann. Um dies zu erreichen, habe ich meine Testfälle wie unten gezeigt erstellt (Beispiel). Ich schließe einen Server in meinen Test ein, um den externen Dienst zu verspotten.Testen von Controllern im Play Framework
public class SomeControllerTest extends WithApplication {
private static Server SERVER;
@Override
protected Application provideApplication() {
final Module testModule = new AbstractModule() {
@Override
public void configure() {
bind(AppDao.class).to(MockAppDaoImpl.class);
}
};
return new GuiceApplicationBuilder().in(Environment.simple()).overrides(testModule).build();
}
@BeforeClass
public static void setup() {
Router router = new RoutingDsl()
.POST("/api/users")
.routeTo(() -> created())
.build();
SERVER = Server.forRouter(router, 33373);
PORT = SERVER.httpPort();
}
@AfterClass
public static void tearDown() {
SERVER.stop();
}
@Test
public void testCreateUser() {
ObjectNode obj = Json.newObject();
obj.put("name", "John Doe");
obj.put("email", "[email protected]");
Http.RequestBuilder request = new Http.RequestBuilder()
.method(POST)
.bodyJson(obj)
.uri("/some/url/here");
Result result = route(request);
assertEquals(ERR_MSG_STATUS_CODE, CREATED, result.status());
assertEquals(ERR_MSG_CONTENT_TYPE, Http.MimeTypes.JSON, result.contentType().get());
}
Meine Erwartung ist, dass, wenn ich den Test ausführen, meine Anwendung der Mock-Server läuft und würde, mein Controller mit dem Mock-Server basieren würde auf Testkonfiguration einen Anruf tätigen wird, die 201
und mein Testfall zurückkommen würde passieren . Aber das passiert nicht, denn sobald die Methode setup()
abgeschlossen ist, wird der Mock-Server beendet, und mein Controller kann keinen Aufruf an sie senden.
Was mache ich hier falsch?
Vielleicht können Sie mit 'Helpers.testServer();' den Server und dann 'Helpers.start (server);' starten. – Kris
@Kris Wie würde ich den Router dem Testserver zur Verfügung stellen, der von den Helfern erstellt wurde? – Rishabh
Sorry, habe es noch nie mit einem Router versucht. – Kris