我正在尝试编写一个 ArchUnit 测试规则,它应该确保带有注释的接口具有带有@ComponentInterface注释的方法参数@Input。像这样:
ArchRule rule =
methods()
.that()
.areDeclaredInClassesThat()
.areInterfaces()
.and()
.areDeclaredInClassesThat()
.areAnnotatedWith(ComponentInterface.class)
.should()
.haveRawParameterTypes(
allElements(CanBeAnnotated.Predicates.annotatedWith(Input.class)));
界面如下所示:
@ComponentInterface
public interface AdminComponent {
void login(@Input(name = "loginString") String loginString);
}
但是测试失败并出现如下错误:
Method < com.some.package.AdminComponent.login(java.lang.String)> does not have raw parameter types all elements annotated with @Input in (AdminComponent.java:0)
在这种情况下,规则应该如何正常工作?
PS 在做了一些调试之后,原来haveRawParameterTypes检查参数类型(类)是否被注释,而不是方法参数本身。所以它查看String类并发现它没有用@Input注释。很高兴知道,但这并不能解决问题。