Junit5 @MethodSource 将参数传递给方法

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

我正在寻找如何将参数传递到使用 Junit5 中的 @MethodSource 注释的方法中

例如,我需要调用 @MethodSource 注释并将一个值传递到方法“MyFactoryMethod”中。有可能的? 有些像这样:

@ParameterizedTest
@MethodSource("MyFactoryMethod(10)")
void testWithMethodSource(int argument) {
    assertNotEquals(9, argument);
}

static IntStream MyFactoryMethod(String var) {
    return IntStream.range(0, var);
}

提前致谢

junit5
2个回答
8
投票

不幸的是,至少在 Jupiter JUnit v.5.8.2 中不支持它。

您可以提供测试类以及外部类中的方法名称。 请注意,外部类中的方法必须通过完全限定的方法名称引用 - com.package.Class#methodName.

示例:

引用测试类中的方法

@MethodSource("getParams")

外部方法

@MethodSource("com.app.test.ArgumentsProvider#getArgs")

有一个选项可以实现您自己的自定义注释,如果没有其他适合您的可以考虑。

如何实现此类注释的示例


0
投票

有一个简单的解决方法,只需使用方法覆盖即可:

@ParameterizedTest
@MethodSource("myFactoryMethod")
void testWithMethodSource(int argument) {
    assertNotEquals(9, argument);
}

static IntStream factoryMethod(String var) {
    return IntStream.range(0, var);
}

public static IntStream myFactoryMethod() {
   return factoryMethod(10);
}

然后您可以根据各个测试的需要创建

myFactoryMethod
的版本。一个额外的步骤,但可行 - 嗯?

对于上述简单的情况,上述解决方案可能显得有些矫枉过正,但想象一下您的

factoryMethod
很复杂并且创建了许多参数,那么上述方法就会得到回报。

© www.soinside.com 2019 - 2024. All rights reserved.