gpt4 book ai didi

java - 使用 Olingo/ODATA 4 编写 ExpressionVisitor 的集成测试

转载 作者:行者123 更新时间:2023-11-30 05:49:24 27 4
gpt4 key购买 nike

我正在使用 Olingo 框架以 Java 语言实现符合 OData 标准第 4 版的 Web 服务。我需要自定义 $filter 的响应。我已经实现了一个访客 as documented in the quick start 。我需要实现集成测试来尝试不同类型的语法并防止将来维护时出现回归错误。

对于 V2,我找到了 the following tutorial和以下代码:

@Test
public void printExpressionWithProperty() throws Exception {
//Use a mocked edmProvider for this tutorial
TestEdmProvider provider = new TestEdmProvider();
Edm edm = RuntimeDelegate.createEdm(provider);
EdmEntityType entityType = edm.getEntityType(TestEdmProvider.NAMESPACE_1, TestEdmProvider.ENTITY_TYPE_1_1.getName());

String rawExpression = "EmployeeId eq '1'";
FilterExpression expression = UriParser.parseFilter (null, entityType, rawExpression);
String whereClause = (String) expression.accept(new JdbcSimpleStringVisitor());
System.out.println("Raw: " + rawExpression + " ------> Whereclause: " + whereClause);
System.out.println();
}

不幸的是,UriParser.parseFilter 在 v4 中不存在。

我试过这个:

public class MyVisitorTest {

private final FullQualifiedName NAME1 = new FullQualifiedName("testNamespace1", "myfield");
private final OData odata = OData.newInstance();

public EdmEntityType createEntityType(final FullQualifiedName fqn) {
if (NAME1.equals(fqn)) {
EdmEntityType entityType = mock(EdmEntityType.class);
when(entityType.getNamespace()).thenReturn(fqn.getNamespace());
when(entityType.getName()).thenReturn(fqn.getName());
return entityType;
}
return null;
}


private Expression parseExpression(final String expressionString)
throws UriParserException, UriValidationException {

UriTokenizer tokenizer = new UriTokenizer(expressionString);

EdmEntityType entityType = createEntityType(NAME1);

Edm edm = mock(Edm.class);
when(edm.getEntityType(NAME1)).thenReturn(entityType);

final Expression expression = new ExpressionParser(edm, odata).parse(tokenizer, null, null, null);
assertNotNull(expression);
assertTrue(tokenizer.next(UriTokenizer.TokenKind.EOF));
return expression;
}

@Test
public void simpleTest() throws UriParserException, UriValidationException, ODataApplicationException, ExpressionVisitException {

String exp = "myfield gt 2019-01-01T00:00:00Z";
Expression e = parseExpression(exp);

MyVisitor myVisitor = new MyVisitor();
String result = (String) e.accept(startEndMeasureVisitor);
assertEquals(result.toString(), "MyResult");
}
}

它不起作用,它向我发送以下消息:

Property paths must follow a structured type.

因此,我正在寻找任何想法来使我的单元测试发挥作用,或者您是否有可以分享的工作示例......

最佳答案

当谈到单元测试时,我会专注于单独测试每个过滤器方法。就像 visitBinaryOperator 根据输入返回预期值等。

我不是命名方面的专家,但我将您的测试称为集成测试。在这里,我将重点测试测试中准备的 FilterOption。在您的原始应用程序中,Apache Olingo 将创建此 FilterOption 并且这部分(应该)在 Olingo 中进行测试。

当我使用 Apache Olingo 时,我经常提到 its repository ,尤其是server-testserver-tecsvc。验证 Olingo 本身的测试方式。

我建议看看FilterValidator因为它可能对您的集成测试有用。

关于java - 使用 Olingo/ODATA 4 编写 ExpressionVisitor 的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com