如何在JUnit 5中使用String数组进行参数化 [英] How to parameterize with String arrays in JUnit 5

查看:309
本文介绍了如何在JUnit 5中使用String数组进行参数化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写 JUnit 5 参数化测试,它将字符串数组( String [] )作为参数:

I would like to write JUnit 5 parametrized test which takes string array (String[]) as a parameter:

@ParameterizedTest
@MethodSource("stringArrayProvider")
void parseFirstAndSecondInt(String[] args) {
    Arguments arguments = new Arguments(args);

    assertEquals(1, arguments.getFirst());
    assertEquals(2, arguments.getSecond());
}

我不确定,如何提供集合/流/迭代器字符串数组。我没有成功尝试使用 @MethodSource 注释

I'm not sure, how to provide a collection/stream/iterator of string arrays. I've unsuccessfully tried following approach with @MethodSource annotation

static Stream<String[]> stringArrayProvider() {
    return Stream.of(
            new String[]{"1", "2"},
            new String[]{"1", "2", "3"});
}

但我收到此例外:

org.junit.jupiter.params.converter.ArgumentConversionException:
    No implicit conversion to convert object of type java.lang.String to type [Ljava.lang.String;

进行此类参数化测试有什么好的设计/解决方案?

What would be a good design/solution to have such kind of parameterized test?

推荐答案

使用 org中的 Arguments.of(/)工厂。 junit.jupiter.params.provider.Arguments 包装你的参数:

Use the Arguments.of() factory from org.junit.jupiter.params.provider.Arguments to wrap your arguments:

static Stream<Arguments> stringArrayProvider() {
    return Stream.of(
            Arguments.of((Object) new String[]{"1", "2"}),
            Arguments.of((Object) new String[]{"1", "2", "3"})
    );
}

详见 http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized - 测试

这篇关于如何在JUnit 5中使用String数组进行参数化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆