JUnit 5和带函数的Arguments.of()。

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

编写一个JUnit 5参数化测试,需要使用Arguments.of()向测试传递函数,但是有2个编译错误,我不知道如何解决。希望得到任何帮助。

  1. Arguments类型中的of(Object...)方法不适用于参数(boolean, String::length)
  2. 该表达式的目标类型必须是一个功能接口。

public static Stream<Arguments> some() {
    return Stream.of(Arguments.of(true, String::length));
}

@ParameterizedTest
@MethodSource
public <T> void some(final T input, final Function<String, Integer> length) {
}

下面的工作符合预期。

public void sample() {
    some(true, String::length);
}
junit5 parameterized
1个回答
0
投票

函数需要封装在一个类中。

public static class P {

    private final Function<String, Integer> mFunction;

    public P(final Function<String, Integer> function) {
        mFunction = function;
    }

    public Function<String, Integer> function() {
        return mFunction;
    }
}

public static Stream<Arguments> some() {
    return Stream.of(Arguments.of(3, "abc", new P(String::length)));
}

@ParameterizedTest
@MethodSource
public <T> void some(final int expect, final String input, final P p) {
    assertEquals(expect, p.function().apply(input));
}
© www.soinside.com 2019 - 2024. All rights reserved.