2025年junit5(Junit5教程)

junit5(Junit5教程)目录 JUnit JUnitJUnitJU 5 这篇 JUnit5 的文章 sumJUnit 5 GitHub 上的一个可工作的示例代码 nbsp nbsp nbsp nbsp groupid org junit jupiter groupid nbsp nbsp nbsp nbsp artifactid junit jupiter params artifactid nbsp nbsp nbsp nbsp version 5 9 2 version nbsp nbsp nbsp nbsp




目录

JUnit

JUnitJUnitJUnit 5这篇JUnit5的文章

sumJUnit 5

GitHub上的一个可工作的示例代码。

    <groupId>org.junit.jupiter</groupId>

    <artifactId>junit-jupiter-params</artifactId>

    <version>5.9.2</version>

    <scope>test</scope>

@ParameterizedTest

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

import org.junit.jupiter.params.ParameterizedTest;

import org.junit.jupiter.params.provider.ValueSource;

public class ValueSourceTest {

    @ParameterizedTest

    @ValueSource(ints = { 2, 4 })

    void checkEvenNumber(int number) {

        assertEquals(0, number % 2,

         "Supplied number is not an even number");

    }

@ValueSourcecheckEvenNumber()

ValueSourceTest

|_ checkEvenNumber

|_ [1] 2

|_ [2] 4

checkEvenNumber()

@ValueSource@ValueSourceshortbyteintlongfloatdoublecharbooleanStringClass

@ValueSource(strings = { "a1", "b2" })

void checkAlphanumeric(String word) {

    assertTrue(StringUtils.isAlphanumeric(word),

             "Supplied word is not alpha-numeric");

void checkNull(String value) {

    assertEquals(null, value);

void checkEmpty(String value) {

    assertEquals("", value);

void checkNullAndEmpty(String value) {

    assertTrue(value == null || value.isEmpty());

@ValueSource(strings = { " ", " " })

void checkNullEmptyAndBlank(String value) {

    assertTrue(value == null || value.isBlank());

void checkExplicitMethodSource(String word) {

assertTrue(StringUtils.isAlphanumeric(word),

"Supplied word is not alpha-numeric");

static Stream<String> checkExplicitMethodSourceArgs() {

return Stream.of("a1",

"b2");

void checkImplicitMethodSource(String word) {

    assertTrue(StringUtils.isAlphanumeric(word),

"Supplied word is not alpha-numeric");

static Stream<String> checkImplicitMethodSource() {

return Stream.of("a1",

"b2");

void checkMultiArgumentsMethodSource(int number, String expected) {

    assertEquals(StringUtils.equals(expected, "even") ? 0 : 1, number % 2);

static Stream<Arguments> checkMultiArgumentsMethodSource() {

    return Stream.of(Arguments.of(2, "even"),

     Arguments.of(3, "odd"));

void checkExternalMethodSource(String word) {

    assertTrue(StringUtils.isAlphanumeric(word),

"Supplied word is not alpha-numeric");

package source.method;

import java.util.stream.Stream;

public class ExternalMethodSource {

    static Stream<String> checkExternalMethodSourceArgs() {

        return Stream.of("a1",

         "b2");

    }

useHeadersInDisplayName

@CsvSource({ "2, even",

"3, odd"})

void checkCsvSource(int number, String expected) {

    assertEquals(StringUtils.equals(expected, "even")

     ? 0 : 1, number % 2);

numLinesToSkipuseHeadersInDisplayNamelineSeparatordelimiterString

files = "src/test/resources/csv-file-source.csv",

numLinesToSkip = 1)

void checkCsvFileSource(int number, String expected) {

    assertEquals(StringUtils.equals(expected, "even")

                 ? 0 : 1, number % 2);

NUMBER, ODD_EVEN

2, even

3, odd

    files = "src/test/resources/csv-file-source_attributes.csv",

    delimiterString = "|",

    lineSeparator = "||",

    numLinesToSkip = 1)

void checkCsvFileSourceAttributes(int number, String expected) {

    assertEquals(StringUtils.equals(expected, "even")

? 0 : 1, number % 2);

|| NUMBER | ODD_EVEN ||

|| 2      | even ||

|| 3      | odd     ||

package java.time.temporal;

public enum ChronoUnit implements TemporalUnit {

    SECONDS("Seconds", Duration.ofSeconds(1)),

    MINUTES("Minutes", Duration.ofSeconds(60)),

HOURS("Hours", Duration.ofSeconds(3600)),

    DAYS("Days", Duration.ofSeconds(86400)),

    //12 other units

@EnumSource(ChronoUnit.class)

void checkEnumSourceValue(ChronoUnit unit) {

assertNotNull(unit);

@EnumSource(names = { "DAYS", "HOURS" })

void checkEnumSourceNames(ChronoUnit unit) {

    assertNotNull(unit);

ArgumentsProviderArgumentsProvider

public class ArgumentsSourceTest {

    @ParameterizedTest

    @ArgumentsSource(ExternalArgumentsProvider.class)

    void checkExternalArgumentsSource(int number, String expected) {

        assertEquals(StringUtils.equals(expected, "even")

                    ? 0 : 1, number % 2,

                    "Supplied number " + number +

                    " is not an " + expected + " number");

    }

public class ExternalArgumentsProvider implements ArgumentsProvider {

    @Override

    public Stream<? extends Arguments> provideArguments(

        ExtensionContext context) throws Exception {

        return Stream.of(Arguments.of(2, "even"),

             Arguments.of(3, "odd"));

    }

public class ArgumentsSourceTest {

    @ParameterizedTest

    @ArgumentsSource(NestedArgumentsProvider.class)

    void checkNestedArgumentsSource(int number, String expected) {

        assertEquals(StringUtils.equals(expected, "even")

? 0 : 1, number % 2,

                 "Supplied number " + number +

                    " is not an " + expected + " number");

    }

    static class NestedArgumentsProvider implements ArgumentsProvider {

        @Override

        public Stream<? extends Arguments> provideArguments(

            ExtensionContext context) throws Exception {

            return Stream.of(Arguments.of(2, "even"),

     Arguments.of(3, "odd"));

        }

    }

public int sum(int a, int b) {

    return a + b;

@CsvSource({ "10, 5, 15" })

void calculateSum(String num1, String num2, String expected) {

    int actual = calculator.sum(Integer.parseInt(num1),

                                Integer.parseInt(num2));

    assertEquals(Integer.parseInt(expected), actual);

StringIntegers

@ValueSource(ints = { 2, 4 })

void checkWideningArgumentConversion(long number) {

    assertEquals(0, number % 2);

@ValueSource(ints = { 1, 2, 3 })

@ValueSource(strings = "DAYS")

void checkImplicitArgumentConversion(ChronoUnit argument) {

    assertNotNull(argument.name());

@ValueSource(strings = "DAYS")ChronoUnit

@ValueSource(strings = { "Name1", "Name2" })

void checkImplicitFallbackArgumentConversion(Person person) {

    assertNotNull(person.getName());

public class Person {

    private String name;

    public Person(String name) {

        this.name = name;

    }

    //Getters & Setters

@ValueSource(strings = { "Name1", "Name2" })Personname

@ValueSource(ints = { 100 })

void checkExplicitArgumentConversion(

    @ConvertWith(StringSimpleArgumentConverter.class) String argument) {

    assertEquals("100", argument);

public class StringSimpleArgumentConverter extends SimpleArgumentConverter {

    @Override

    protected Object convert(Object source, Class<?> targetType)

        throws ArgumentConversionException {

        return String.valueOf(source);

    }

@ConvertWith@ValueSource(ints = { 100 })StringSimpleArgumentConverter.class

@ParameterizedTestArgumentsAccessor

@CsvSource({ "John, 20",

         "Harry, 30" })

void checkArgumentsAccessor(ArgumentsAccessor arguments) {

    Person person = new Person(arguments.getString(0),

                             arguments.getInteger(1));

    assertTrue(person.getAge() > 19, person.getName() + " is a teenager");

ArgumentsAccessor

@CsvSource({ "John, 20",

             "Harry, 30" })

void checkArgumentsAggregator(

    @AggregateWith(PersonArgumentsAggregator.class) Person person) {

    assertTrue(person.getAge() > 19, person.getName() + " is a teenager");

public class PersonArgumentsAggregator implements ArgumentsAggregator {

    @Override

    public Object aggregateArguments(ArgumentsAccessor arguments,

        ParameterContext context) throws ArgumentsAggregationException {

        return new Person(arguments.getString(0),

arguments.getInteger(1));

    }

ArgumentsAggregator@AggregateWith

Fluent assertions for javajava.util.function.Consumer

void checkNumber(int number, Consumer<Integer> consumer) {

    consumer.accept(number);    

static Stream<Arguments> checkNumberArgs() {    

    Consumer<Integer> evenConsumer =

            i -> Assertions.assertThat(i % 2).isZero();

    Consumer<Integer> oddConsumer =

            i -> Assertions.assertThat(i % 2).isEqualTo(1);

    return Stream.of(Arguments.of(2, evenConsumer),

         Arguments.of(3, oddConsumer));

【注】本文译自: JUnit 5 Parameterized Tests (reflectoring.io)


编程小号
上一篇 2025-03-17 21:51
下一篇 2025-03-30 22:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/56758.html