Arquillian @Deployment有URL路径吗?

时间:2017-12-04 12:15:39

标签: unit-testing java-ee jboss-arquillian

使用Arquillian框架上的@Deployment,您可以在容器上部署WebArchive文件。我想将HTTP请求发送到此容器。此容器是否具有特定的URL?我可以将其设置为具有特定的URL吗?

我已经读过@ArquillianResource,但是在下面的代码中它总是返回null。

@RunWith(Arquillian.class)
public class MyClassTest {

    @ArquillianResource
    private URL baseURL2;

    @ArquillianResource(MyClass.class)
    private URL baseServerURL;

    @Deployment 
    public static WebArchive createDeployment() { 
        WebArchive w = ShrinkWrap 
                .create(WebArchive.class)
                .addPackages(true, "my.package")
                .addClass(MyClass.class);
        System.out.println(w);
        return w;
    }

    @Test @RunAsClient  
    public void firstTest(@ArquillianResource(MyClass.class) URL baseURL) {
        System.out.println(baseURL);
        System.out.println(baseURL2);
        Assert.assertTrue(false);
    }  

输出:

null
null

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你必须设置所有这些:

String port = System.getProperty("server.port");
if (port == null) {
    RestAssured.port = Integer.valueOf(8080);
} else {
    RestAssured.port = Integer.valueOf(port);
}

String basePath = System.getProperty("server.base");
if (basePath == null) {
    basePath = "/basePath/rest/";
}
RestAssured.basePath = basePath;

String baseHost = System.getProperty("server.host");
if (baseHost == null) {
    baseHost = "http://localhost";
}
RestAssured.baseURI = baseHost;

RestAssured.defaultParser = Parser.JSON;

更好的方法是将此代码添加到父类以及所有或您的测试以扩展此功能。

所以使用上面的配置,如果你有一个像http://localhost:8080/persons/ {id} / roles这样的网址,你可以像这样从你的测试中休息一下:

List<SecurityRole> personGet = Arrays.asList(given().header("Accept-Language", "en").header("Authorization", getToken()).pathParam("id", person.getId()).when().get("/persons/{id}/roles")
.then().statusCode(200).extract().response().as(SecurityRole[].class));

您不必担心网址只是您的终点网址。