给定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...but显然我误解了上述方法的目的。那个实用程序的Javadoc一点用处都没有。我是否可以将最后一行替换为满足断言“在带B注解的类型中声明的方法”的任何操作?
发布于 2019-11-08 20:41:13
结果,我无谓地试图将参数传递给orShould方法。为了实现我的目标,应该使用无参数方法扩展规则:
methods()
.that()
.areAnnotatedWith(A.class)
.should()
.beAnnotatedWith(B.class)
.orShould()
.beDeclaredInClassesThat()
.areAnnotatedWith(B.class);https://stackoverflow.com/questions/58698863
复制相似问题