Smart猫小萌
更大的灵活性在某种程度上意味着编写起来更加复杂和样板,尤其是在大多数情况下,测试用例是相当静态的,但不是那么动态的。考虑我想测试Math.add():参数化测试版本如下所示:@ParameterizedTest@CsvSource({ "1,1,2", "2,2,4", "3,3,6", "4,4,8", "5,5,10", "6,6,12", "7,7,14", "10,90,100" })public void parameterizedTest(int left, int right, int expected) { assertEquals(expected, Math.addExact(left, right));}动态测试版本如下:@TestFactoryCollection<DynamicTest> dynamicTest() { return Arrays.asList( DynamicTest.dynamicTest("Test1", () -> assertEquals(2, Math.addExact(1, 1))), DynamicTest.dynamicTest("Test2", () -> assertEquals(4, Math.addExact(2, 2))), DynamicTest.dynamicTest("Test3", () -> assertEquals(6, Math.addExact(3, 3))), DynamicTest.dynamicTest("Test4", () -> assertEquals(8, Math.addExact(4, 4))), DynamicTest.dynamicTest("Test5", () -> assertEquals(10, Math.addExact(5, 5))), DynamicTest.dynamicTest("Test6", () -> assertEquals(12, Math.addExact(6, 6))), DynamicTest.dynamicTest("Test7", () -> assertEquals(14, Math.addExact(7, 7))), DynamicTest.dynamicTest("Test8", () -> assertEquals(100, Math.addExact(10, 90))));}它已经有许多样板代码。所以我尝试使用 returnStream<DynamicTest>删除这些样板代码:@TestFactoryStream<DynamicTest> dynamicTest2() { return Stream.of( "1,1,2", "2,2,4", "3,3,6", "4,4,8" , "5,5,10" , "6,6,12" , "7,7,14", "10,90,100") //How to do???????? .map(data-> DynamicTest.dynamicTest(data, () -> assertEquals(xxx, Math.addExact(yy,zz))));}但是如何将字符串格式的测试数据转换为参数并调用 SUT。我环顾DynamicTestAPI 看看是否有什么可以帮助我但找不到任何有用的东西,所以我放弃了.....所以,我更喜欢参数化测试。更优雅、干净、易读易写。测试用例的可读性更为重要。