我已经创建了下面的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?
1条答案
按热度按时间ykejflvf1#
provideArguments(…)
在调用测试 * 之前 * 被调用。您的
ParamsProvider
类由JUnit示例化,您在desiralizeAndCreateValidationRunnerInstance
中所做的任何事情都应该在ParamsProvider
构造函数中完成。此外,您已经将反序列化配置的值 Package 到Arguments中,并在
providesArguments
中对它们进行双重 Package 。请执行以下操作: