diff --git a/java/templates/java-maven-quarkus/README.md b/java/templates/java-maven-quarkus/README.md index 6def4686..7d7c5f6c 100644 --- a/java/templates/java-maven-quarkus/README.md +++ b/java/templates/java-maven-quarkus/README.md @@ -12,4 +12,10 @@ To start the service, simply run: ```shell $ quarkus dev -``` \ No newline at end of file +``` + +## Unit testing + +The restate `RestateExtension` junit extension does currently not work together with quarkus CDI, so you cannot combine +`@RestateTest` with `@QuarkusTest`, so if you want to use `@Inject` in unit test with restate services, you must use +the `RestateRunner` directly as shown in the `GreeterCdiTest`. \ No newline at end of file diff --git a/java/templates/java-maven-quarkus/pom.xml b/java/templates/java-maven-quarkus/pom.xml index ad65c2a2..72b3708c 100644 --- a/java/templates/java-maven-quarkus/pom.xml +++ b/java/templates/java-maven-quarkus/pom.xml @@ -39,6 +39,10 @@ io.quarkus quarkus-vertx + + io.quarkus + quarkus-junit5 + dev.restate @@ -46,6 +50,13 @@ ${restate.version} + + dev.restate + sdk-testing + ${restate.version} + test + + com.google.protobuf diff --git a/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterCdiTest.java b/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterCdiTest.java new file mode 100644 index 00000000..e4c162a7 --- /dev/null +++ b/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterCdiTest.java @@ -0,0 +1,44 @@ +package org.acme; + +import dev.restate.client.Client; +import dev.restate.sdk.endpoint.Endpoint; +import dev.restate.sdk.testing.RestateRunner; +import io.quarkus.test.junit.QuarkusTest; +import jakarta.inject.Inject; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@QuarkusTest +public class GreeterCdiTest { + + @Inject + Greeter greeter; + + static RestateRunner restateRunner; + + @BeforeEach + void beforeEach() { + if (restateRunner == null) { + restateRunner = RestateRunner.from(Endpoint.builder().bind(greeter).build()).build(); + restateRunner.start(); + } + } + + @AfterAll + static void afterAll() { + if (restateRunner != null && restateRunner.getRestateContainer().isRunning()) { + restateRunner.stop(); + } + } + + @Test + void test() { + var ingressClient = Client.connect(restateRunner.getRestateUrl().toString()); + var c = GreeterClient.fromClient(ingressClient); + var response = c.greet(new Greeter.Greeting("John Doe")); + assertEquals("You said hi to John Doe!", response.message()); + } +} diff --git a/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterTest.java b/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterTest.java new file mode 100644 index 00000000..b3669c8c --- /dev/null +++ b/java/templates/java-maven-quarkus/src/test/java/org/acme/GreeterTest.java @@ -0,0 +1,24 @@ +package org.acme; + +import dev.restate.client.Client; +import dev.restate.sdk.testing.BindService; +import dev.restate.sdk.testing.RestateClient; +import dev.restate.sdk.testing.RestateTest; +import org.acme.Greeter.GreetingResponse; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@RestateTest +public class GreeterTest { + + @BindService + Greeter greeter = new Greeter(); + + @Test + void test(@RestateClient Client ingressClient) { + GreeterClient.IngressClient c = GreeterClient.fromClient(ingressClient); + GreetingResponse response = c.greet(new Greeter.Greeting("John Doe")); + assertEquals("You said hi to John Doe!", response.message()); + } +}