如何解决@MethodSource的AvoidDuplicateLiterals PMD错误(无需抑制)
解决@MethodSource触发AvoidDuplicateLiterals规则的方案
方案一:使用JUnit 5.7+的方法引用(推荐)
从JUnit 5.7版本开始,@MethodSource支持直接用方法引用替代字符串字面量,彻底避免重复写方法名字符串。
如果测试方法和数据源方法同名,可直接省略@MethodSource的参数:
@ParameterizedTest @MethodSource public void someTestMethod(final String endpoint) throws Exception { // 测试逻辑 } private static Stream<String> someTestMethod() { // 返回测试数据的逻辑 }
如果数据源方法名和测试方法不同,直接通过类名引用方法:
@ParameterizedTest @MethodSource(YourTestClass::abc) public void someTestMethod(final String endpoint) throws Exception { // 测试逻辑 } private static Stream<String> abc() { // 返回测试数据的逻辑 }
方案二:使用public静态常量
如果必须保留字符串参数的写法,将方法名字符串定义为public static final常量(而非private),确保注解能正确引用,同时PMD会识别这是常量引用而非重复字面量:
public static final String DATA_SOURCE_METHOD = "abc"; @ParameterizedTest @MethodSource(DATA_SOURCE_METHOD) public void someTestMethod(final String endpoint) throws Exception { // 测试逻辑 } private static Stream<String> abc() { // 返回测试数据的逻辑 }
内容的提问来源于stack exchange,提问作者Debarpan Mondal
相关产品推荐
相关产品推荐

