2016-11-29 2 views
1

У меня есть следующие правила:TestMethodWithoutAssertionOrExpectedException

[[junit4:C_TestMethodWithoutAssertion]] 
.All Unit Tests must either use a expected Exception or call an Assert Method. 
[source,cypher,role=constraint,requiresConcepts="junit4:TestClass,junit4:AssertMethod,junit4:TestMethod",severity=blocker] 
---- 
MATCH 
    (testType:Type)-[:DECLARES]->(testMethod:Test:Method) 
    -[:ANNOTATED_BY]-(annotation:Annotation)-[:OF_TYPE]->(atype:Type) 
WHERE 
atype.fqn="org.junit.Test" 
AND NOT testMethod.abstract 
AND NOT (annotation)-[:HAS]->(:Value{name:"expected"}) 
AND NOT (testMethod)-[:INVOKES*..3]->(:Method:Assert) 
RETURN 
    testType AS DeclaringType, 
    testMethod AS Method 
---- 

, если я использую его в Neo4j браузере, правило работает отлично. Но если я использую его для отчета в файле adoc, я получаю много «FalsePositives». У кого-нибудь есть идея.

LG Chris

ответ

1

Последний запрос не возвращает результаты, поскольку абстрактная часть фильтров слишком много. Вот фиксированный и слегка переработанный вариант:

MATCH (testType:Type)-[:DECLARES]->(testMethod:Test:Method) -[:ANNOTATED_BY]-(annotation:Annotation)-[:OF_TYPE]->(atype:Type) WHERE atype.fqn="org.junit.Test" AND NOT (has(testMethod.abstract) AND testMethod.abstract) AND NOT ( (annotation)-[:HAS]->(:Value{name:"expected"}) OR (testMethod)-[:INVOKES*..3]->(:Method:Assert) ) RETURN testType AS DeclaringType, testMethod AS Method

+0

Обратите внимание, что «ожидается» значение аннотации может быть переработан в другую концепцию, создавая связь между методом испытания и ожидаемым типом исключения. –

+0

Я изменил его на AND NOT (имеет (testMethod.abstract) AND testMethod.abstract), и теперь он работает. Thanx – idefixcert

+0

Обновлен ответ соответственно. –

0

Хорошо, теперь я кронштейн «()» функция НЕ заявление, и поэтому он работает:

[[junit4:C_TestMethodWithoutAssertion]] 
.All Unit Tests must either use a expected Exception or call an Assert Method. 
[source,cypher,role=constraint,requiresConcepts="junit4:TestClass,junit4:AssertMethod,junit4:TestMethod",severity=blocker] 
---- 
MATCH 
    (testType:Type)-[:DECLARES]->(testMethod:Test:Method) 
    -[:ANNOTATED_BY]-(annotation:Annotation)-[:OF_TYPE]->(atype:Type) 
WHERE 
atype.fqn="org.junit.Test" 
AND NOT (testMethod.abstract) 
AND NOT ((annotation)-[:HAS]->(:Value{name:"expected"})) 
AND NOT ((testMethod)-[:INVOKES*..3]->(:Method:Assert)) 
RETURN 
    testType AS DeclaringType, 
    testMethod AS Method 
----