单元测试球衣 Restful Services

2022-09-01 09:57:28

我是单元测试的新手,我想在项目中测试一些 Jersey 服务。我们正在使用 Junit。请指导我以更好的方式编写测试用例。

法典:

    @GET
    @Path("/getProducts/{companyID}/{companyName}/{date}")
    @Produces(MediaType.APPLICATION_JSON)
    public Object getProducts(@PathParam("companyID") final int companyID,
            @PathParam("date") final String date, @PathParam("companyName") final String companyName)
            throws IOException {
        return productService.getProducts(companyID, companyName, date);
    }

上面提到的服务工作正常,我想编写junit测试用例来测试上面提到的方法。上述方法将检索 JSON 格式的产品列表 ()。我想编写测试用例来检查响应状态和json格式。List<Product>

注意:我们使用的是泽西岛 1.17.1 版本。

:)将不胜感激


答案 1

对于泽西岛Web服务测试,有几个测试框架,即:泽西岛测试框架(在其他答案中已经提到过 - 请参阅此处1.17版本的文档:https://jersey.java.net/documentation/1.17/test-framework.html)和REST-Assured(https://code.google.com/p/rest-assured) - 请参阅此处两者的比较/设置(http://www.hascode.com/2011/09/rest-assured-vs-jersey-test-framework-testing-your-restful-web-services/)。

我发现REST-Assured更有趣,更强大,但泽西岛测试框架也非常易于使用。在 REST-Assured 中,要编写一个测试用例“以检查响应状态和 json 格式”,您可以编写以下测试(非常类似于在 jUnit 中所做的那样):

package com.example.rest;

import static com.jayway.restassured.RestAssured.expect;
import groovyx.net.http.ContentType;

import org.junit.Before;
import org.junit.Test;

import com.jayway.restassured.RestAssured;

public class Products{

    @Before
    public void setUp(){
        RestAssured.basePath = "http://localhost:8080";
    }

    @Test
    public void testGetProducts(){
        expect().statusCode(200).contentType(ContentType.JSON).when()
                .get("/getProducts/companyid/companyname/12345088723");
    }

}

这应该为你做伎俩...您也可以非常轻松地验证JSON特定元素以及许多其他详细信息。有关更多功能的说明,您可以查看REST-Assured(https://code.google.com/p/rest-assured/wiki/Usage)中非常好指南。另一个很好的教程是这个 http://www.hascode.com/2011/10/testing-restful-web-services-made-easy-using-the-rest-assured-framework/

呵呵。


答案 2

只需忽略注释并编写一个通过所需参数的普通单元测试即可。我认为返回通常是“javax.ws.rs.core.Response”类型...有一个可以使用的 getEntity() 方法。在这种情况下,使用像Mockito这样的Mock对象框架也可能有所帮助。