Junit5 从 @MethodSource 注释返回 Map

Ale*_*lex 4 java junit5

我在 Junit 测试用例上使用 @MethodSource 注释,以便从另一个方法接收 Map<String, Object>。

似乎 @MethodSource 无法支持“Map”对象。

这是我收到的错误:org.junit.platform.commons.PreconditionViolationException:无法将 java.util.HashMap 的实例转换为流:{1=Obj1, 2=Obj2}

您知道是否有一种方法可以像本例中那样接收“Map”对象?

@ParameterizedTest
@MethodSource("hashMapProvider")
void testMyMapObj(Map<String, Object> argument) {
    assertNotNull(argument);
    Object obj1 = argument.get("1");
}


static Map<String, Object> hashMapProvider() {
    Map<String, Object> map = new HashMap<>();
    map.put("1", "Obj1");
    map.put("2", "Obj2");
    return map;
 }
Run Code Online (Sandbox Code Playgroud)

Geo*_*vov 6

如果测试方法中的参数是Map<String, Object>,请用作Stream<Map<String, Object>>源方法中的返回值:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.Map;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertNotNull;

class SimpleTest {

    @ParameterizedTest
    @MethodSource("hashMapProvider")
    void test(Map<String, Object> argument) {
        System.out.println(argument);
        assertNotNull(argument);
    }

    static Stream<Map<String, Object>> hashMapProvider() {
        return Stream.of(
                Map.of("1", "Obj1", "2", "Obj2"),
                Map.of("3", "Obj3")
        );
    }
}
Run Code Online (Sandbox Code Playgroud)