使用嵌套列表进行的放心测试失败,java

使用嵌套列表进行的放心测试失败,java,java,web-services,rest,unit-testing,rest-assured,Java,Web Services,Rest,Unit Testing,Rest Assured,我面临一个错误,我将开发我的测试。我尝试了很多东西,但每次都失败了 这是我的JSON: { "evenement": [ { "dateDebut": "2016-02-20T00:00:00-05:00", "dateFin": "2016-02-21T00:00:00-05:00", "id": "28", "tirages": [ { "dateDebut": "

我面临一个错误,我将开发我的测试。我尝试了很多东西,但每次都失败了

这是我的JSON:

{
"evenement": [
    {
        "dateDebut": "2016-02-20T00:00:00-05:00",
        "dateFin": "2016-02-21T00:00:00-05:00",
        "id": "28",
        "tirages": [
            {
                "dateDebut": "2016-02-20T00:00:00-05:00",
                "dateFin": "2016-02-20T00:00:00-05:00",
                "description": "Un super prix1",
                "id": "27",
                "titre": "A Gagner1"
            },
            {
                "dateDebut": "2016-02-21T00:00:00-05:00",
                "dateFin": "2016-02-21T00:00:00-05:00",
                "description": "Un super prix2",
                "id": "28",
                "titre": "A Gagner2"
            }
        ]
    },
    {
        "dateDebut": "2016-03-20T00:00:00-04:00",
        "dateFin": "2016-03-21T00:00:00-04:00",
        "id": "29",
        "tirages": {
            "dateDebut": "2016-03-20T00:00:00-04:00",
            "dateFin": "2016-03-20T00:00:00-04:00",
            "description": "Un super prix3",
            "id": "29",
            "titre": "A Gagner3"
        }
    }
]}
这是我的测试:

 ArrayList<String> alDescr1 = new ArrayList<String>();
    alDescr1.add("Un super prix1");
    alDescr1.add("Un super prix2");

    ArrayList<Object[]> alDescr2 = new ArrayList<Object[]>();
    alDescr2.add(alDescr1.toArray());
    ArrayList<String> alDescr3 = new ArrayList<String>();
    alDescr3.add("Un super prix3");
    alDescr2.add(alDescr3.toArray());

    expect().statusCode(200)
            .body(
                    "evenement.tirages.description", hasItems(alDescr1.toArray(), alDescr2.toArray())
            ).when().get("/rest/amc-events/all");
实际上,我试图检查一个元素是否有[Un super prix1,Un super prix2],另一个元素是否有“Un super prix3”。但是,如果有一种方法只检查元素是否存在,而不管第一个元素是否有2个元素,那么最好是

谢谢
Val

很好,我在这里找到了解决方案:

导入com.grallandco.employee.service.converter.EmployeeConverter;
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
导入javax.xml.bind.JAXBContext;
导入com.sun.jersey.api.json.json配置;
导入com.sun.jersey.api.json.JSONJAXBContext;
@提供者
公共类JAXBContextResolver实现ContextResolver{
私有JAXBContext上下文;
私有类[]类型={EmployeeConverter.Class,Class1.Class,Class2.Class};
公共JAXBContextResolver()引发异常{
this.context=new JSONJAXBContext(JSONConfiguration.mapped().arrays(“employee”).build(),
类型);
}
公共JAXBContext getContext(类objectType){
对于(类类型:类型){
if(type==objectType){
返回上下文;
}
}
返回null;
}
}

在我看来,JSON api响应应该将第三个tirages项放在一个数组中,而不仅仅是一个原始的jsonobject。如果您不能改变这一点,那么您可以调整json访问器,使您测试的所有3个项在测试中都表示为非数组项。如果我听起来很困惑,请调整你的问题。我可以更改JSON响应,所以我会看一看。对于json访问器,我理解,如果可能的话,我想这样做,但我不知道怎么做。你有没有举个例子?为了子孙后代,你能在你的答案中包括你认为有用的链接的相关部分吗?这样,如果链接断开、更改等,您的答案不会变得无用。非常感谢。
java.lang.AssertionError: 1 expectation failed.
JSON path evenement.tirages.description doesn't match.
Expected: (a collection containing ["Un super prix1", "Un super prix2"] and a collection containing [["Un super prix1", "Un super prix2"], ["Un super prix3"]])
  Actual: [[Un super prix1, Un super prix2], Un super prix3]
import com.grallandco.employee.service.converter.EmployeeConverter;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;

import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;

@Provider
public class JAXBContextResolver implements ContextResolver < JAXBContext > {

    private JAXBContext context;
    private Class[] types = {EmployeeConverter.class, Class1.class, Class2.class};

    public JAXBContextResolver() throws Exception {
        this.context = new JSONJAXBContext(JSONConfiguration.mapped().arrays("employee").build(),
                types);

    }

    public JAXBContext getContext(Class objectType) {
        for (Class type : types) {
            if (type == objectType) {
                return context;
            }
        }
        return null;
    }
}