You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:32:31