验证src中是否存在来自test的包

时间:2015-09-27 17:39:03

标签: java jqassistant

我想检查src中是否存在来自测试的包。例如,如果我的测试在my.package.customer中,我想验证在src中是否有一个包含该名称的包。到目前为止,我已经尝试了以下查询。该查询将返回(我希望)所有条目,其中至少一个测试所依赖的类来自同一个包。这对我有用。剩下的问题是我不知道如何将此工作作为jqassistant约束,因为如果此查询的计数为0,则目标应该失败。

MATCH
    (package:Package)-[:CONTAINS]->(classInPackage:Class),
    (classInPackage:Type)-[:DECLARES]->(aMethod:Method),
    (aMethod)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(testAnnotationType:Type),
    (classInPackage)-[DEPENDS_ON]->(anotherClass:Type:Class),
    (depPackage:Package)-[:CONTAINS]->(anotherClass)                
WHERE
    package.fqn = depPackage.fqn
RETURN
    classInPackage.fqn, anotherClass.fqn, depPackage.fqn

1 个答案:

答案 0 :(得分:0)

我假设您正在处理规则,即概念和约束。因此,我建议使用预定义的概念“junit4:TestMethod”来拆分,它将标签“Junit4”和“Test”添加到每个使用@Test注释的方法中:

<constraint id="my-rule:EveryClassMustHaveAUnitTest">
  <requiresConcept refId="junit4:TestMethod" />
  <description>For every class there must be at least one unit test.</description>
  <cypher><![CDATA[
  MATCH
    (a:Artifact)-[:CONTAINS]->(c:Type:Class)
  WHERE
    a.type <> "test-jar"
    and not has(c.abstract)
    and not (:Test:Method)-[:INVOKES]->(:Method)<-[:DECLARES]-(c)
  RETURN
    c.fqn

  ]]>
  </cypher>
</constraint>

查询返回

的每个类
  • 不是测试代码
  • 不抽象,即具体
  • 并且不存在调用该类
  • 的任何方法的测试方法

不确定条件是否足以避免误报,如果我们错过了某些内容,请尝试再回到这里。