实验简介

通过对被测程序的接口和调用关系进行分析后,可以得知,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)通常情况下,代码级接口测试的关注重点在接口上,也就是被测试接口需要传入什么样的参数,返回什么样的值或者进行什么样的处理。我们不会过多关注于代码的实现逻辑,但是如果不关注这些东西,我们将很难实现高效的测试。所以针对代码级测试设计,如何高效的设计测试用例,是一个非常值得探讨的话题。