ArchUnit确保注释存在

问题描述 投票:0回答:1

给出版本[[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 @ ...

java unit-testing archunit
1个回答
2
投票
原来,我不必要地尝试将参数传递给orShould方法。为了实现我的目标,应使用无参数方法来扩展规则:
© www.soinside.com 2019 - 2024. All rights reserved.