给出版本[[0.12中的ArchUnit库:]]是否可以测试方案“用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
注释的类型中声明的方法”的任何工作替换最后一行吗?
给出版本0.12中的ArchUnit库:是否可以测试一个场景“用A注释的方法也应该用B注释或以B注释的类型声明”?示例:A.java @ ...
orShould
方法。为了实现我的目标,应使用无参数方法来扩展规则: