如何在 JUnit 5 中使用少量枚举创建参数化测试?

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

例如,我的项目中有几个枚举:

  • 图形,值为 TRIANGLE 和 SQUARE
  • 颜色,值为 RED 和 YELLOW

如何使用所有组合的笛卡尔积创建测试?以下代码不起作用:

// this doesn't work
@ParameterizedTest
@EnumSource(value = Figure.class)
@EnumSource(value = Color.class)
void test(Figure figure, Color color) {
    System.out.println(String.format("%s_%s",figure,color));
}

我想获得所有组合:

TRIANGLE RED
TRIANGLE YELLOW
SQUARE RED
SQUARE YELLOW

我的临时解决方案是使用注释@MethodSource

// this works
@ParameterizedTest
@MethodSource("generateCartesianProduct")
void test(Figure figure, Color color) {
    System.out.println(String.format("%s_%s",figure,color));
}


private static Stream<Arguments> generateCartesianProduct() {
    List<Arguments> argumentsList = new ArrayList<>();

    for(Figure figure : Figure.values()) {
        for(Color color : Color.values()) {
            argumentsList.add(Arguments.of(figure,color));
        }
    }

    return argumentsList.stream();
}

但我不想在测试中添加额外的代码。 JUnit 5 有办法解决我的问题吗?

java unit-testing junit junit5 parameterized-tests
1个回答
0
投票

JUnit Pioneer 附带

@CartesianTest
:

import org.junitpioneer.jupiter.cartesian.CartesianTest;
import org.junitpioneer.jupiter.cartesian.CartesianTest.Enum;

class FigureAndColorTest {

    enum Figure {
        TRIANGE, SQUARE
    }

    enum Color {
        RED, YELLOW
    }

    @CartesianTest
    void test(@Enum Figure figure, @Enum Color color) {
        System.out.printf("%s %s%n", figure, color);
    }

}

输出:

TRIANGE RED
TRIANGE YELLOW
SQUARE RED
SQUARE YELLOW

免责声明:我是 JUnit Pionner 的维护者之一。

© www.soinside.com 2019 - 2024. All rights reserved.