junit 参数化archunit测试?

irtuqstp  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(143)

我有一个方法名称列表,我想用以下形式编写一个ArchUnit测试:

ArchRule rule = methods().that().haveName("methodName").should(new ArchCondition<JavaMethod>.   ("test") {
    @Override
    public void check(JavaMethod javaMethod, ConditionEvents conditionEvents) {
      ...
    }
  });

  rule.check(classesToTest);
}

字符串
}
我尝试组合使用@ParameterizedTest和@ArchUnit,但这不起作用。我还尝试在for循环中创建ArchRule,但是当第一次发生冲突时,这会失败,并且不会检查我稍后尝试测试的规则。

q3qa4bjr

q3qa4bjr1#

@ArchTest s由ArchUnit自己的测试运行器评估,该运行器不支持JUnit的@ParameterizedTest s。
也许您可以使用参数化方法创建ArchRule,该方法允许您创建

@ArchTest
ArchRule rule1 = createRule(1);

@ArchTest
ArchRule rule2 = createRule(2);

@ArchTest
ArchRule rule3 = createRule(3);

// ...

字符串
只需要一点开销
或者,如果您自己负责类文件导入,也可以将ArchUnit测试编写为纯JUnit测试,参见。https://www.archunit.org/getting-started的数据。

lskq00tm

lskq00tm2#

在此期间,我自己找到了解决办法。在以下情况下,您可以创建ArchUnit规则列表:

List<ArchRule> rules = new ArrayList();

for (....) {
   rules.add(...)
}

字符串
然后,您可以将它们组合在一起并测试:

CompositeArchRule.of(rules).check(classesToTest);

相关问题