Arquillian RESTful Web服务测试:URL错误及接口返回验证问题
用Arquillian测试自研REST API的解决方案
我来帮你搞定这个Arquillian测试REST API的问题~针对你需要验证的汇率转换API,我整理了完整的测试实现思路和代码示例:
核心步骤说明
- 完善Arquillian的部署配置,确保你的REST资源类被正确打包部署
- 使用JAX-RS Client(Arquillian兼容)发送请求并获取响应
- 通过断言验证返回字符串的格式和内容
完整测试类示例
import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.junit.Test; import org.junit.runner.RunWith; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.MediaType; import java.net.URL; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; @RunWith(Arquillian.class) public class ExchangeRateTest { // 注入部署后应用的基础URL,Arquillian会自动填充 @ArquillianResource private URL baseUrl; // 定义部署包:打包你的REST资源类和必要配置 @Deployment(testable = false) // 设置为false,适合外部REST请求测试 public static WebArchive createDeployment() { return ShrinkWrap.create(WebArchive.class, "exchange-rate-service.war") .addClass(ExchangeRateResource.class) // 替换成你的REST资源类全类名 .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); // CDI环境需要,非CDI可移除 } @Test public void testExchangeRateConversion() { // 初始化JAX-RS客户端 Client client = ClientBuilder.newClient(); // 发送请求:根据你的API路径调整,这里假设API路径是/exchange,参数通过query传递 String response = client.target(baseUrl.toExternalForm()) .path("exchange") .queryParam("input", "USD/10/EUR") // 如果是路径参数,改成.path("USD/10/EUR") .request(MediaType.TEXT_PLAIN) .get(String.class); // 验证返回结果:先匹配整体格式,再检查关键内容 assertThat("返回格式不符合预期", response, matchesPattern("\\d+ USD -> \\d+\\.\\d+ EUR")); assertThat("未包含输入的10 USD", response, containsString("10 USD ->")); assertThat("未以EUR结尾", response, endsWith(" EUR")); // 关闭客户端 client.close(); } }
关键注意事项
- 依赖配置:确保你的pom.xml(或build.gradle)中引入了Arquillian容器适配器(比如WildFly、Tomcat对应的适配器)、JAX-RS API依赖,以及JUnit和Hamcrest/AssertJ断言库
- API路径适配:如果你的API是通过路径参数接收输入(比如
/exchange/USD/10/EUR),需要调整target的路径拼接逻辑 - 断言选择:示例中用了Hamcrest的匹配器,你也可以用JUnit 5的Assertions或者AssertJ来编写更简洁的断言
- 部署优化:如果你的服务需要其他配置文件(比如application.properties),可以用
addAsResource()方法添加到部署包中
内容的提问来源于stack exchange,提问作者fleshab
相关产品推荐
相关产品推荐

