Wie kann ich testen, Erholsamen Methoden mit Arquillian?
Habe ich eine Reihe von Klassen für die Arbeit mit REST-Methoden im Projekt. Sie sehen so aus:
@Path("customer/")
@RequestScoped
public class CustomerCollectionResource {
@EJB
private AppManager manager; //working with DB
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response list(@QueryParam("email") String email) {
final List<Customer> entities = manager.listCustomers(email);
//adding customers to result
return Response.ok(result).build();
}
}
Danach habe ich schon schrieb-test Methode:
@RunWith(Arquillian.class)
public class CustomerResourceTest {
@Deployment
public static WebArchive createTestArchive() {
return ShrinkWrap.create(WebArchive.class, "test.war")
//Adding omitted
//.addClasses(....)
}
@Test @GET @Path("projectName/customer") @Consumes(MediaType.APPLICATION_JSON)
public void test(ClientResponse<List<Customer>> response) throws Exception {
assertEquals(Status.OK.getStatusCode(), response.getStatus());
}
}
Und ich bekomme NullPointerException beim Versuch, diesen test ausführen. Es ist, weil der leere Antwort im test-Fall. Warum ist dies passiert? DB richtig konfiguriert ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Modi, einen arquillian test ausgeführt werden kann: in-container und client-Modus. HTTP-Schnittstellen geprüft werden können nur im client-Modus (habe nie versucht den Erweiterungen, nur Vanille Arquillian für diese).
Durch Standard-test-Methoden ausgeführt, die in den Kontext des Containers, aufgerufen durch den arquillian test-runner-servlet.
Im client-Modus, test-Methoden ausgeführt werden außerhalb des Containers, so dass Sie nicht haben Zugriff auf EJBs, EntityManager, etc injiziert in die test-Klasse, aber Sie können injizieren einen URL-parameter für die test-Methode.
Können Sie dieses URL-parameter an die URLs bauen, rufen Sie Ihren HTTP-Dienst verwenden, was Methode, die Sie haben, wie die neue JAX-RS client API.
Können Sie auch mischen zwei Modi:
Manchmal ist dies sogar notwendig, da einige Erweiterungen, wie die Persistenz kann nicht ausgeführt werden, im client-Modus.