比较枚举时简化测试

我有一些类似于以下的测试代码:

@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);
  }

但是(当然)该示例甚至无法编译。

有人想避免对这些枚举检查重复结构吗?

w602350769 回答:比较枚举时简化测试

您可以像这样使用document.getElementsByTagName("head")[0].getElementsByTagName("script")[0].src

getEnumConstants

作为JUnit 5测试:

import java.util.Arrays;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        testEnum(TestEnum.class,AnotherTestEnum.class);
    }

    private static <T extends Enum<T>,T2 extends Enum<T2>> void testEnum(Class<T> enums1Class,Class<T2> enums2Class) {
        var enums1 = Arrays.stream(enums1Class.getEnumConstants()).map(Enum::name).collect(Collectors.toSet());
        var enums2 = Arrays.stream(enums2Class.getEnumConstants()).map(Enum::name).collect(Collectors.toSet());

        // compare here
    }

    private enum TestEnum {
        A,B
    }

    private enum AnotherTestEnum {
        A,B
    }
}
,

您的行

var enums_1 = Arrays.stream(enumsA.values()).map(Enum::name).collect(Collectors.toSet());

应使用一种方法。假设您有一个名为testifyEnum的方法,该方法将获得一个enum参数并计算分配的右侧,您只需要执行以下操作:

var enums_1 = testifyEnum(enumsA);

因此您的代码将如下所示:

@Test
  public void testEnums_AB() {
    // arrange + act
    var enums_1 = testifyEnum(enumsA);
    var enums_2 = testifyEnum(enumsB);

    // assert
    Assertions.assertEquals(enums_1,enums_2);
  }

  @Test
  public void testEnums_CD() {
    // arrange + act
    var enums_3 = testifyEnum(enumsC);
    var enums_4 = testifyEnum(enumsD);

    // assert
    Assertions.assertEquals(enums_3,enums_4);
  }
本文链接:https://www.f2er.com/3152158.html

大家都在问