由于缺乏更好的方法,我决定坚持解决方法。这是如何实现上述方案的示例:
@Testpublic class ExampleDataProvider { @DataProvider(name = "ShapeCodes") public static Object[][] getShapeCodes() { return new Object[][] { new Object[] { Shape.Square }, new Object[] { Shape.Triangle } }; } @DataProvider(name = "ColorCodes") public static Object[][] geColorCodes() { return new Object[][] { new Object[] { Color.Green }, new Object[] { Color.Red } }; } @DataProvider(name = "objectCodes") public static Object[][] getObjectCodes(){ return combine(geColorCodes(), getShapeCodes()); } public static Object[][] combine(Object[][] a1, Object[][] a2){ List<Object[]> objectCodesList = new linkedList<Object[]>(); for(Object[] o : a1){ for(Object[] o2 : a2){ objectCodesList.add(concatAll(o, o2)); } } return objectCodesList.toArray(new Object[0][0]); } @SafeVarargs public static <T> T[] concatAll(T[] first, T[]... rest) { //calculate the total length of the final object array after the concat int totalLength = first.length; for (T[] array : rest) { totalLength += array.length; } //copy the first array to result array and then copy each array completely to result T[] result = Arrays.copyOf(first, totalLength); int offset = first.length; for (T[] array : rest) { System.arraycopy(array, 0, result, offset, array.length); offset += array.length; } return result; }}这样,我就可以分别使用我的颜色代码和形状代码,并且还可以组合使用。
因此,我的测试方法如下所示:
@Test(dataProvider = "objectCodes", dataProviderClass = ExampleDataProvider.class) public void test(String ShapeCode, String ColorCode) throws IOException {.......................... }@Test(dataProvider = "ShapeCodes", dataProviderClass = ExampleDataProvider.class) public void test(String ShapeCode) throws IOException { ............. ............. }@Test(dataProvider = "ColorCodes", dataProviderClass = ExampleDataProvider.class) public void test(String ColorCode) throws IOException { ............. ............. }


