Neo4j 带有lambda表达式和使用者断言的TestMethods的JQassistant规则

Neo4j 带有lambda表达式和使用者断言的TestMethods的JQassistant规则,neo4j,java-8,cypher,consumer,jqassistant,Neo4j,Java 8,Cypher,Consumer,Jqassistant,我们的项目很少有单元测试,其中断言作为lambda或consumer传递给测试类。示例如下如何编写密码规则约束这样可以识别断言,并且不会将方法标记为不带断言。当前正在使用junit4:TestMethodWithoutAssertion 试验方法: @Test public void testSuccessfulIdempotency(){ transportConsumerFlow.accept(Mockito.mock(TransRequest.class),

我们的项目很少有单元测试,其中断言作为lambda或consumer传递给测试类。示例如下如何编写密码规则约束这样可以识别断言,并且不会将方法标记为不带断言。当前正在使用junit4:TestMethodWithoutAssertion

试验方法:

     @Test 
     public void testSuccessfulIdempotency(){
     transportConsumerFlow.accept(Mockito.mock(TransRequest.class), 
     (t)->{
           assertEquals(t, expectedResponseMessage);
      });
     }

在上面的示例中,断言实际存在且有效。但无法检测到junit4:AssertMethod的概念,可能是因为它作为使用者而不是测试方法中的直接调用出现

jQAssistant目前不明确支持Lambda表达式,但您可以使用以下概念将其标识为合成静态方法(由字节码生成):

MATCH
  (type:Type)-[:DECLARES]->(lambda:Method)
WHERE
  exists(lambda.synthetic)
  and exists(lambda.static)
  and lambda.name starts with("lambda$")
SET
  lambda:Lambda
WITH
  type, lambda
MATCH
  (type)-[:DECLARES]->(method:Method)
WHERE
  method <> lambda
  and method.firstLineNumber <= lambda.firstLineNumber
  and method.lastLineNumber >= lambda.lastLineNumber
MERGE
  (method)-[:DECLARES_LAMBDA]->(lambda)
RETURN
  method, collect(lambda)

@Dirk Mahler:是JQassistant不支持lambda构造吗?:感谢您的回复!但是,子句和方法.firstLineNumber=lambda.lastLineNumber似乎不起作用。firstLineNumber和lastLineNumber属性似乎不可用。只需使用以下测试类进行了尝试,就成功了:公共类LambdaTest{@test public void lambda(){Stream.of(“1”,“2”).forEach(s->assertThat(s,notNullValue());}您是否验证了是否可以通过启动服务器(mvn jqassistant:server)在Neo4j浏览器中执行查询,以及它是否返回结果?我只是在Neo4j浏览器中执行了上述给定的概念,但没有给出任何结果。“未找到行”。有什么先决条件吗?最低版本?升级到jqassistant版本1.3.0和maven编译器以强制执行1.8 Java版本后,这种方法奏效了!多谢!上述概念中的一个更正。collect(lambda)代替RETURN方法,它可以是RETURN方法
MATCH
  (testType:Type)-[:DECLARES]->(testMethod:Test:Method)
WHERE
  NOT (testMethod)-[:INVOKES|DECLARES_LAMBDA*..3]->(:Method:Assert)
RETURN
  testType AS DeclaringType,
  testMethod AS Method