Java 使用Junit 5参数化对象列表

Java 使用Junit 5参数化对象列表,java,junit5,Java,Junit5,我想用Junit 5参数化测试,它应该调用这样的方法: service.doSomething(List<Person> persons, int amount); 问题在于列表。我不确定我应该如何参数化,使用一些转换器将Person值转换为一些primitice,或者使用argumentsArgulator?另外,Person还包含另一个需要处理的对象(PersonId) 您有什么建议吗?如果您在一个测试类中只需要此参数化,您可以使用提供任意复杂度的参数集流,例如: import

我想用Junit 5参数化测试,它应该调用这样的方法:

service.doSomething(List<Person> persons, int amount);
问题在于
列表
。我不确定我应该如何参数化,使用一些转换器将Person值转换为一些primitice,或者使用argumentsArgulator?另外,Person还包含另一个需要处理的对象(PersonId)


您有什么建议吗?

如果您在一个测试类中只需要此参数化,您可以使用提供任意复杂度的参数集流,例如:

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

import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.params.provider.Arguments.arguments;

...

@ParameterizedTest
@MethodSource("doSomethingArgsProvider")
public void testServiceDoSomething(final List<Person> persons, final int amount) {
    // preparations

    service.doSomething(persons, amount);

    // assertions
}

static Stream<Arguments> doSomethingArgsProvider() {
    final var person1 = new Person(new PersonId(1), "John");
    final var person2 = new Person(new PersonId(2), "Jane");

    return Stream.of(
        arguments(List.of(person1), 1),
        arguments(List.of(person1, person2), 2),
    );
}
import org.junit.jupiter.params.ParameterizedTest;
导入org.junit.jupiter.params.provider.Arguments;
导入org.junit.jupiter.params.provider.MethodSource;
导入java.util.List;
导入java.util.stream.stream;
导入静态org.junit.jupiter.params.provider.Arguments.Arguments;
...
@参数化测试
@MethodSource(“doSomethingArgsProvider”)
public void testServiceDoSomething(最终列表人员、最终整数金额){
//准备工作
服务。剂量(人、数量);
//断言
}
静态流,并将其与一起使用

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

import java.util.List;
import java.util.stream.Stream;

import static org.junit.jupiter.params.provider.Arguments.arguments;

...

@ParameterizedTest
@MethodSource("doSomethingArgsProvider")
public void testServiceDoSomething(final List<Person> persons, final int amount) {
    // preparations

    service.doSomething(persons, amount);

    // assertions
}

static Stream<Arguments> doSomethingArgsProvider() {
    final var person1 = new Person(new PersonId(1), "John");
    final var person2 = new Person(new PersonId(2), "Jane");

    return Stream.of(
        arguments(List.of(person1), 1),
        arguments(List.of(person1, person2), 2),
    );
}