Учитывая ArchUnit библиотека в версии 0,12 :
Возможно ли протестировать сценарий "методы, аннотированные A
, также должны быть аннотированы B
или быть объявленным в типе, помеченном B
"?
Пример:
A.java
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface A {
}
B. java
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface B {
}
TestCases.java
public class TestCases {
static class ShouldFail {
@A
public void m() {
}
}
static class ShouldPass {
@A
@B
public void m() {
}
}
@B
static class ShouldPassToo {
@A
public void m() {
}
}
}
Что я пробовал?
Я думал, что ArchConditions.beDeclaredInClassesThat
будет делать эту работу, поэтому я подготовил следующее правило:
MethodsShouldConjunction rule = methods()
.that()
.areAnnotatedWith(A.class)
.should()
.beAnnotatedWith(B.class)
.orShould(beDeclaredInClassesThat(areAnnotatedWith(B.class))); //<-- doesn't compile
... но, очевидно, я неправильно понял цель упомянутого метода. Javadoc этой утилиты вообще не помог. Могу ли я заменить последнюю строку на что-нибудь работающее, удовлетворяющее утверждению «методы, объявленные в типе, помеченном B
»?