未加载JUnit 5参数化测试@ArgumentsSource参数

hpxqektj  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(128)

我已经创建了下面的JUnit 5参数化测试,ArgumentsSource用于加载测试参数:

public class DemoModelValidationTest {

public ParamsProvider paramsProvider;

public DemoModelValidationTest () {
    try {
         paramsProvider = new ParamsProvider();
    }
    catch (Exception iaex) {

    }
}

@ParameterizedTest
@ArgumentsSource(ParamsProvider.class)
void testAllConfigurations(int configIndex, String a) throws Exception {
  paramsProvider.executeSimulation(configIndex);
}

}
ParamsProvider类如下所示:

public class ParamsProvider implements ArgumentsProvider {
public static final String modelPath = System.getProperty("user.dir") + File.separator + "demoModels";

YAMLDeserializer deserializedYAML;
MetaModelToValidationModel converter;
ValidationRunner runner;
List<Configuration> configurationList;
List<Arguments> listOfArguments;

public ParamsProvider() throws Exception {
    configurationList = new ArrayList<>();
    listOfArguments = new LinkedList<>();
    deserializedYAML = new YAMLDeserializer(modelPath);
    deserializedYAML.load();

    converter = new MetaModelToValidationModel(deserializedYAML);
    runner = converter.convert();
    configurationList = runner.getConfigurations();

    for (int i = 0; i < configurationList.size(); i++) {
        listOfArguments.add(Arguments.of(i, configurationList.get(i).getName()));
    }
}

public void executeSimulation(int configListIndex) throws Exception {
    final Configuration config = runner.getConfigurations().get(configListIndex);
    runner.run(config);
    runner.getReporter().consolePrintReport();
}

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {

    return listOfArguments.stream().map(Arguments::of);
    //      return Stream.of(Arguments.of(0, "Actuator Power"), Arguments.of(1, "Error Logging"));

}}

在**provideArguments()**方法中,注解掉的代码运行正常,但第一行代码

listOfArguments.stream().map(Arguments::of)

正在返回以下错误:
如果您在运行时遇到异常,请执行以下操作:配置错误:必须为此@ParameterizedTest配置至少一组参数
我不确定我是否在provideArguments()方法中遇到了流的强制转换问题,但我猜它不知何故无法将listOfArguments的元素Map到流,流最终可以采用如下形式:

Stream.of(Arguments.of(0, "Actuator Power"), Arguments.of(1, "Error Logging"))

我是否缺少listOfArguments的正确流Map?

ykejflvf

ykejflvf1#

provideArguments(…)在调用测试 * 之前 * 被调用。
您的ParamsProvider类由JUnit示例化,您在desiralizeAndCreateValidationRunnerInstance中所做的任何事情都应该在ParamsProvider构造函数中完成。
此外,您已经将反序列化配置的值 Package 到Arguments中,并在providesArguments中对它们进行双重 Package 。
请执行以下操作:

@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {

return listOfArguments.stream();

}}

相关问题