У меня есть некоторый тестовый код, который выглядит следующим образом:
@Test
public void testEnums_AB() {
// arrange + act
var enums_1 = Arrays.stream(enumsA.values()).map(Enum::name).collect(Collectors.toSet());
var enums_2 = Arrays.stream(enumsB.values()).map(Enum::name).collect(Collectors.toSet());
// assert
Assertions.assertEquals(enums_1, enums_2);
}
@Test
public void testEnums_CD() {
// arrange + act
var enums_3 = Arrays.stream(enumsC.values()).map(Enum::name).collect(Collectors.toSet());
var enums_4 = Arrays.stream(enumsD.values()).map(Enum::name).collect(Collectors.toSet());
// assert
Assertions.assertEquals(enums_3, enums_4);
}
... и т. Д.
Я думаю о том, как упростить шаблоны, чтобы иметь логику только один раз,что-то вроде:
@ParameterizedTest(name = "{index} => enum1={0},enum2={1}")
@MethodSource("parametersProvider")
public void testEnum(enum enum1, enum enum2) {
// arrange + act
var enumsBlah = Arrays.stream(enum1.values()).map(Enum::name).collect(Collectors.toSet());
var enumsFoo = Arrays.stream(enum2.values()).map(Enum::name).collect(Collectors.toSet());
// assert
Assertions.assertEquals(enumsBlah, enumsFoo);
}
Но (конечно) этот пример даже не компилируется.
У кого-нибудь есть идея избежать повторяющейся структуры для этих проверок перечисления?