Проверьте, существует ли пакет из теста в src
Я хотел бы проверить, существует ли пакет из тестов в 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 ответ
Я предполагаю, что вы работаете с правилами, т.е. понятиями и ограничениями. Поэтому я бы рекомендовал разделить вещи, используя предопределенную концепцию "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>
Запрос возвращает каждый класс, который
- это не тестовый код
- не абстрактный, т.е. конкретный
- и не существует тестового метода, который бы вызывал какой-либо метод этого класса
Не уверены, что условий достаточно, чтобы избежать ложных срабатываний, попробуйте и вернитесь сюда, если мы что-то пропустили.