测试调用QueryResults.asModel()的方法时可传入的有效对象咨询
测试
QueryResults.asModel()的入参方案 1. 明确入参类型
QueryResults.asModel()的入参是**GraphQueryResult接口的实例**,从你给出的测试代码when(queryResults.asModel(graphQueryResult)).thenReturn(model);也能直接看出这一点,核心是构造符合要求的GraphQueryResult测试对象。
2. 构造包含Statement的测试对象
要让传入的result至少包含一个Statement,只需给GraphQueryResult实例预设Statement数据,用Mockito的话可以这么做:
- 先手动构造一个
Statement实例:用框架提供的工厂类(比如RDF框架里的ResourceFactory)创建subject、predicate、object,再组装成Statement。 - 给mock的
GraphQueryResult设置行为:让它的hasNext()方法先返回true(表示有数据),之后返回false;next()方法返回你构造好的Statement。
3. 完整测试代码示例
// 1. 构造测试用的Statement Resource subject = ResourceFactory.createResource("http://example.org/test-subject"); Property predicate = ResourceFactory.createProperty("http://example.org/test-predicate"); Literal object = ResourceFactory.createLiteral("test-content"); Statement testStmt = ResourceFactory.createStatement(subject, predicate, object); // 2. Mock GraphQueryResult对象,确保它能返回这个Statement GraphQueryResult mockResult = mock(GraphQueryResult.class); // 第一次调用hasNext返回true,后续返回false,模拟只有一条数据 when(mockResult.hasNext()).thenReturn(true, false); when(mockResult.next()).thenReturn(testStmt); // 3. 预设asModel的返回值 Model expectedModel = ModelFactory.createDefaultModel(); expectedModel.add(testStmt); when(queryResults.asModel(mockResult)).thenReturn(expectedModel); // 4. 执行被测代码并验证结果 final var model = QueryResults.asModel(mockResult); assertEquals(expectedModel, model);
4. 关键注意点
- 如果你用的不是Mockito,而是其他测试框架,构造测试对象的方式会有差异,但核心逻辑一致:让查询结果对象能返回至少一个Statement。
- 必须保证mock的
GraphQueryResult类型和asModel()方法的入参类型完全匹配,否则预设的返回值不会生效。
内容的提问来源于stack exchange,提问作者ashmedai82
相关产品推荐
相关产品推荐

