Java QueryFilter未按预期工作

Java QueryFilter未按预期工作,java,rally,Java,Rally,我有这段代码,它按预期停止工作。我敢肯定它至少在一年前起作用了,但现在已经不起作用了。我试图检查同一测试用例和同一构建的缺陷是否已经打开 有什么想法吗?RESTAPI最近有变化吗 private boolean isOldDefect(String refTestCase, String foundIn) throws IOException { boolean oldDefect = false; // Query for Test Case to associate lat

我有这段代码,它按预期停止工作。我敢肯定它至少在一年前起作用了,但现在已经不起作用了。我试图检查同一测试用例和同一构建的缺陷是否已经打开

有什么想法吗?RESTAPI最近有变化吗

private boolean isOldDefect(String refTestCase, String foundIn) throws IOException {

    boolean oldDefect = false;
    // Query for Test Case to associate later with new Defect
    QueryRequest defectRequest = new QueryRequest("defect");
    defectRequest.setFetch(new Fetch(RALLY_FormattedID, "Name", "FoundInBuild", RALLY_TestCase, "Owner"));
    defectRequest.setQueryFilter(new QueryFilter("FoundInBuild", "=", foundIn).and(new QueryFilter("TestCase",
            "=", refTestCase)));

    QueryResponse defQueryResponse = restApi.query(defectRequest);
    if (defQueryResponse.wasSuccessful()) {
        if (defQueryResponse.getResults().size() > 1) {
            oldDefect = true;
        }
    }
    return oldDefect;
}

缺陷有一个
TestCases
集合,因此在缺陷上没有单一的TestCase属性-因此,作为查询条件查询单个TestCase ref将不起作用

您需要从缺陷中提取TestCases集合,并在其中循环查找匹配TestCase的ref。如下所示:

    String rallyURL = new String("https://rally1.rallydev.com");
    String wsapiVersion = new String("v2.0");
    String wsapiURL = new String(rallyURL + "/slm/webservice/" + wsapiVersion);
    ....
    // Fetch Test Cases collection
    QueryRequest testCasesRequest = new QueryRequest(defectJsonObject.getAsJsonObject("TestCases"));
    testCasesRequest.setFetch(new Fetch("Name", "FormattedID", "ObjectID"));

    // Query the TestCases collection
    JsonArray testCasesOfDefect = restApi.query(testCasesRequest).getResults();

    String myTestCaseRef = new String(wsapiURL + "/testcase/12345678910");

    for (int i=0; i<testCasesOfDefect.size(); i++) {
        if (testCasesOfDefect.get(i).getAsJsonObject().get("_ref").getAsString().equals(myTestCaseRef)) {
            System.out.println("Matching TestCase Found:");
            System.out.println(testCasesOfDefect.get(i).getAsJsonObject().get("_ref").getAsString());
            System.out.println("Name: " + testCasesOfDefect.get(i).getAsJsonObject().get("Name") + "; " + testCasesOfDefect.get(i).getAsJsonObject().get("FormattedID").getAsString());

        }
    }
String rallyURL=新字符串(“https://rally1.rallydev.com");
字符串wsapiVersion=新字符串(“v2.0”);
String wsapiURL=新字符串(rallyURL+“/slm/webservice/”+wsapiVersion);
....
//获取测试用例集合
QueryRequest testCasesRequest=新的QueryRequest(defectJsonObject.getAsJsonObject(“测试用例”);
setFetch(新的Fetch(“Name”、“FormattedID”、“ObjectID”);
//查询TestCases集合
JsonArray testcasesofeffect=restApi.query(testCasesRequest.getResults();
字符串myTestCaseRef=新字符串(wsapiURL+“/testcase/12345678910”);

对于(int i=0;iI谈论的是一个单一缺陷,它只能与一个测试用例/我们相关联,或者根本不能与测试用例/用户故事相关联。因此,我的代码是正确的,并且在一段时间前还在工作。测试用例现在是缺陷对象上的只读集合,即使只有一个测试用例与该缺陷相关联。因此,轮询根据答案,选择是检查测试用例关系所必需的。