我使用 Jupiter 编写了一些 ArchUnit-Tests。我发现了一些例子,你可以使用非静态方法编写 ArchUnit 测试,例如:
@Test
void enforceExceptionNames() {
classes().that()
.areAssignableTo(Exception.class)
.and(modifier(PUBLIC))
.and().areNotAnnotatedWith("some.qa.ExceptionNameFlaw")
.should()
.haveNameMatching(".*Exception").orShould()
.haveNameMatching(".*Error")
.check(modulClasses);
}
优点是,你可以做一些不可能静态的事情——比如在运行时使用反射和其他东西来提取包名。
但是性能很差。像 1-10 秒,具体取决于大小。
无论哪种方式,ArchUnit 都声明所有类都缓存为静态的。