[英]Arquillian API REST Example
我找不到任何使用 arquillian 進行 jax-rs 測試的示例。 我使用 wildfly 10 托管容器。
我正在嘗試自己做,這是我的示例代碼:
@RunWith(Arquillian.class)
public class DeploymentTest {
@Deployment(testable = false)
public static Archive<?> deploy() {
return ShrinkWrap.create(WebArchive.class, "cos-arq-test.war")
.addClasses(MANUEJB.class, HelloWorld.class, HelloWorldRESTImpl.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}
@ArquillianResource
private URL base;
private static WebTarget target;
@Before
public void setUpClass() throws MalformedURLException {
Client client = ClientBuilder.newClient();
target = client.target(URI.create(new URL(base, "rest/helloWorldREST").toExternalForm()));
}
@Test
@RunAsClient
public void testResponse(@ArquillianResource URL base) throws InterruptedException, ExecutionException {
System.out.println("====================================================");
System.out.println("This test should run inside the Wildfly 10 container");
System.out.println("====================================================");
try {
System.out.println("URL TARGET: " + target.getUri().toURL().toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
assertEquals("Hello", target.request().get().readEntity(String.class));
/*
Future<Response> r1 = target.request().async().get();
Response response = r1.get();
if (null != response) {
assertEquals(HttpStatus.OK, response.getStatus());
assertNotNull(response.getEntity());
assertEquals("Hello " + "manuel" + "!", response.readEntity(String.class));
}
*/
}
}
這是我的服務代碼:
@Path("/helloWorldREST")
public class HelloWorldRESTImpl implements HelloWorld {
@GET
public Response sayHi() {
return Response.ok("Hello").build();
}
@Override
@GET
@Path("/sayHi/{name}")
@Produces(MediaType.APPLICATION_JSON)
public Response sayHi(@PathParam("name") String name) {
MANUEJB ejb = null;
javax.naming.Context initialContext = null;
try {
initialContext = new InitialContext();
} catch (NamingException e) {
e.printStackTrace();
}
try {
ejb = (MANUEJB) initialContext.lookup("java:app/cos-arq-test/MANUEJB");
} catch (NamingException e) {
e.printStackTrace();
}
String result = ejb.method(name);
return Response.ok(result).build();
}
}
但是我收到一個錯誤,它沒有找到該服務。
我使用帶有托管 wildfly 10 容器的 arquillian 庫:
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.11.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
</dependency>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<version>2.0.0.Final</version>
</dependency>
這是我的容器的 arquillian 配置:
<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="wildfly10" default="true">
<configuration>
<property name="jbossHome">/home/manumg/test-containers/wildfly-10.1.0.Final</property>
</configuration>
</container>
對於入門示例,您可以查看https://github.com/arquillian/arquillian-extension-rest/blob/master/rest-client/README.md 。
自述文件中描述的代碼位於https://github.com/arquillian/arquillian-extension-rest/tree/master/rest-client/test-app的同一存儲庫中。
對於入門 maven 項目,我建議您使用與 Wildfly 21(jakarta ee 8 容器)相關的 maven 原型 wildfly-jakartaee-webapp-archetype。
要運行測試,您必須:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.