目前我们只为Subsection类生成了一个测试用例在这节里我们按照前述的方法通过Test Case向导为StringUtils类创建一个测试用例代码框架并编写测试方法然后将这两个测试用例捆绑组合在一个测试套件中一起运行 选中StringUtils类通过File>New>Test双击Test Case图标为StringUtils类的stringArray()方法创建测试用例接受默认的测试用例类名TestStringUtils 在向导生成的测试用例代码框架中删除测试固件(因为是静态方法没有必要用固件)即删除StringUtils的成员变量声明setUp()和tearDown()方法并在类中定义一个isArrayEquals()的方法删除向导生成的testStringArray()测试方法体中的内容编写自己的测试代码其最终代码如下所示 代码清单 错误!文档中没有指定样式的文字TestStringUtilsStringUtils类的测试用例 package chapter; import junitframework*; public class TestStringUtils extends TestCase { public void testStringArray() { String str = null str = str = a str = abcstr = ab; String[] arr = null arr = {} arr = {a} arr = {a b c} arr = { a b } trimArr = {a b};
assertNull(StringUtilsstringArray(str false)); assertTrue(isArrayEquals(arr StringUtilsstringArray(str false))); assertTrue(isArrayEquals(arr StringUtilsstringArray(str false))); assertTrue(isArrayEquals(arr StringUtilsstringArray(str false))); assertTrue(isArrayEquals(arr StringUtilsstringArray(str false))); assertTrue(isArrayEquals(arr StringUtilsstringArray(str false))); assertTrue(isArrayEquals(trimArr StringUtilsstringArray(str true))); assertFalse(isArrayEquals(StringUtilsstringArray(str false) StringUtilsstringArray(str true))); }
//判断两个字符数组是否相等 private boolean isArrayEquals(String[] arr String[] arr) { if (arr == null || arr == null) { if (arr == null && arr == null) { return true; } else { return false; } } else if (arrlength != arrlength) { return false; } else { for (int i = ; i < arrlength; i++) { if (!arr[i]equals(arr[i])) { return false; } } return true; } } } 虽然JUnit框架提供了许多assertEquals()的重载方法但却没有入参是两字符串数组的assertEquals()重载方法所以我们需要自己定义一个判断两字符串数组是否相同的方法isArrayEquals()如第~行所示 在testStringArray()方法中我们提供了覆盖多数情况的字符串测试点(特殊转换字符串和其目标值)如第~行所示尔后调用assertXxx()设置测试规则你也可以像上一节中的TestSubsection测试用例一样运行它 注意 如果你在内容窗格TestStringUtils文件标签上右击发现弹出的菜单中只有Run Test using TestSubsection时请在Project>Project Properties>Run>在Run设置页中取消TestSubsection运行设置项的Context Menu选项否则只会运行原TestSubsection的测试用例 只包括个类左右的小型项目工程也许无需用到测试套件仅通过逐一单独运行测试用例来完成测试就可以了但对于一个包含较多测试用例的工程测试套件能给你带来极大的方便它将多个测试用例捆绑在一起运行达到一呼而百应的批量处理效果 下面我们就来为TestSubsection和TestStringUtils这两个测试用例创建一个测试套件并通过测试套件运行这两个测试 .File>New>Test>在Test页中双击Test Suite图标启动创建测试套件的向导如下图所示 educitycn/img_///jpg> 在对话框列表中已经列出了工程中已有的两上测试用例类你可以通过右边的Add和Remove添加或删除测试用例你可以通过Add Recursively将指定目录下的所有测试用例一并加入 点击Next到下一步 .指定测试套件类名 educitycn/img_///jpg> 接受JBuilder为测试套件所提供的默认类名按Finish完成该测试套件的创建其代码如下所示 代码清单 错误!文档中没有指定样式的文字测试套件类 package chapter; import junitframework*; public class TestSuite extends TestCase { public TestSuite(String s) { super(s); }
public static Test suite() { TestSuite suite = new TestSuite(); suiteaddTestSuite(chapterTestStringUtilsclass); suiteaddTestSuite(chapterTestSubsectionclass); return suite; } } 测试套件类最主要的代码是suite()方法(第~行)首先在方法中声明一个TestSuite变量通过addTestSuite()方法将TestStringUtils和TestSubsection测试用例捆绑在一起你也可以通过这个方法添加其他的测试用例类 TestSuite除可以将整个测试用例捆绑外还可以捆绑另外的一个测试套件或一个测试用例中的测试方法 添加一个测试套件 suiteaddTest(suite_) 添加测试用例某个方法 suiteaddTest(new TestSubsection (testGetValue)) 在工程窗格资源树的TestSuite文件节点上右击在弹出的菜单中选择Run Test using DefaultsJBuilder启动JBTestRunner运行套件中捆绑的所有测试用例其窗口如下图所示 educitycn/img_///jpg> TestSuite下有两个测试用例类测试用例节点下是测试方法节点 |