实验简介
通过对被测程序的接口和调用关系进行分析后,可以得知,ArrayCompare是适合做接口测试的。同时,我们也可以根据接口的调用层次关系,来决定先对哪些接口进行测试。如果时间紧迫的情况下,那么笔者建议从上而下进行,这样当我们测试上层接口时,下导接口自然会被调用到,一并进行了测试。但是这样的测试并不完整,也不够细致,所以笔者仍然建议从下而上地进行。更加完整地测试各个开放出来的接口。
本节主要针对arraySort()和splitString()两个接口为例,来完成其驱动程序和测试数据。
实验目的
(1) 掌握测试驱动程序开发过程。
(2) 应用路径覆盖法和条件覆盖法设计测试用例。
实验流程
1. 开发arraySort测试驱动程序
// 测试接口arraySort()的测试驱动程序 public void testArraySort(Integer[] array, Integer[] expect) { ArrayHandle ah = new ArrayHandle(); Integer[] actual = ah.arraySort(array); if (Arrays.equals(actual, expect)) { System.out.println("ArrayHandle-arraySort接口: 测试成功."); } else { System.out.println("ArrayHandle-arraySort接口: 测试失败."); } } |
2. 设计针对arraySort的测试用例
public static void main(String[] args) { MainTest mt = new MainTest(); // 测试接口arraySort(),实参直接实例化数组的方式传递,更加快捷 mt.testArraySort(new Integer[] { 1, 3, 2, 4 }, new Integer[] { 1, 2, 3, 4 }); mt.testArraySort(new Integer[] { -1, -3, -2, -4 }, new Integer[] { -4, -3, -2, -1 }); mt.testArraySort(new Integer[] { -100, -300, 0, 200 }, new Integer[] { -300, -100, 0, 200 }); } |
3. 开发splitString测试驱动程序
// 测试接口splitString()的测试驱动程序 public void testSplitString(String source, String delimiter, Integer[] expect) { StringHandle sh = new StringHandle(); Integer[] actual = sh.splitString(source, delimiter); if (Arrays.equals(actual, expect)) { System.out.println("StringHandle-splitString: 测试成功."); } else { System.out.println("StringHandle-splitString: 测试失败."); } } |
4. 设计针对splitString的测试用例
public static void main(String[] args) { MainTest mt = new MainTest(); // 测试接口splitString() mt.testSplitString("11,22,33,44", ",", new Integer[] { 11, 22, 33, 44 }); mt.testSplitString("11#22#33#44", "#", new Integer[] { 11, 22, 33, 44 }); // mt.testSplitString("11,22T,33,44", ",", new Integer[]{1}); // mt.testSplitString("-1,-2,-3", ",", new Integer[]{-1,-2,-3}); } |
5. 注意事项
(1) 我们一定要在不同的包里面完成测试开发,而不要与源代码在同一个包下面进行。因为真实的情况下,我们的测试代码是不允许对源代码有任何侵入行为的。所以上述的测试,我们需要新建一个包来进行,那么在测试类的源代码中要记得先导入被测试类的包:com.woniuxy.compare。
(2) 通常情况下,代码级接口测试的关注重点在接口上,也就是被测试接口需要传入什么样的参数,返回什么样的值或者进行什么样的处理。我们不会过多关注于代码的实现逻辑,但是如果不关注这些东西,我们将很难实现高效的测试。所以针对代码级测试设计,如何高效的设计测试用例,是一个非常值得探讨的话题。
思考练习
(1) 如何确保我们的测试用例是完整的?
(2) 如果没有代码,只有接口规范,你会如何设计测试用例?