首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArchUnit确保注释的存在

ArchUnit确保注释的存在
EN

Stack Overflow用户
提问于 2019-11-04 18:05:02
回答 1查看 729关注 0票数 0

给定ArchUnit库的0.12版本

是否有可能测试一种场景:“用A注释的方法也应该用B注释,或者以带B注释的类型声明”?

示例:

A.java

代码语言:javascript
复制
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface A {
}

B.java

代码语言:javascript
复制
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface B {
}

TestCases.java

代码语言:javascript
复制
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会做好这项工作,所以我准备了以下规则:

代码语言:javascript
复制
MethodsShouldConjunction rule = methods()
    .that()
    .areAnnotatedWith(A.class)
    .should()
    .beAnnotatedWith(B.class)
    .orShould(beDeclaredInClassesThat(areAnnotatedWith(B.class))); //<-- doesn't compile

...but显然我误解了上述方法的目的。那个实用程序的Javadoc一点用处都没有。我是否可以将最后一行替换为满足断言“在带B注解的类型中声明的方法”的任何操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-08 20:41:13

结果,我无谓地试图将参数传递给orShould方法。为了实现我的目标,应该使用无参数方法扩展规则:

代码语言:javascript
复制
methods()
    .that()
    .areAnnotatedWith(A.class)
    .should()
    .beAnnotatedWith(B.class)
    .orShould()
    .beDeclaredInClassesThat()
    .areAnnotatedWith(B.class);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58698863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档