【流程设计】
1. 创建测试用例;
(1) 新建一个“Junit”目录(不同于“src”目录),但要求测试用例与要测试的类在相同的包中(原因在【小结】中会提到);
(2) TestCase与被测试类要是一一对应的关系;测试方法与被测试方法要是一一对应的关系;
2. 书写测试方法;主要是写assert和fail方法;
(1)Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法,同时提供很多断言的方法,
常用断言方法
assertEquals("失败提示信息","期望数据","测试数据")
断言获取数据是否与所期望的相等
assertNotNull("失败提示信息","测试数据")
断言获取数据不为null,否则提示错误
assertNull("失败提示信息","测试数据")
断言获取数据是为null,否则提示错误
assertTrue("失败提示信息",测试数据blooean值)
断言获取数据是否为ture,否则提示错误
fail("失败提示信息");
此方法一般放到异常处,遇到此方法,测试将停止!
assertSame("失败提示信息","期望数据","测试数据")
断言获取数据是否与所期望的相同
(2) “Fail”与“Exception”:
- fail,期望出现的错误。产生原因:assert函数出错(如assertFalse(true));fail函数产生(如fail(……))。
- exception,不期望出现的错误,属于unit test程序运行时抛出的异常。它和普通代码运行过程中抛出的runtime异常属于一种类型。
3. 编译测试用例;
4. 运行测试用例;
运行方式有二种:
(1) 单击右键“Run As/Junit Test”:执行单个TestCase中所有的测试方法,执行顺序是自上而下;
(2) 利用TestUnite来执行多个TestCase:
1) 创建类,必须继承TestUnite;
2) 在该类中必须实现下面方法:
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTestSuite(HelloWorldTest2.class);
suite.addTestSuite(TestPeopleAction.class);
return suite;
}
3) 右击“Run as ”;
【Junit用法小结】
1. 好的测试应该做到以下几点:
1) 测试的独立性:一次只测试一个对象,方便定位出错的位置。这有2层意思:一个TestCase,只测试一个对象;一个TestMethod,只测试这个对象中的一个方法。
2) - 给测试方法一个合适的名字。
3) - 在assert函数中给出失败的原因,如:assertTrue( “… should be true”, ……),方便查错。在这个例子中,如果无法通过assertTrue,那么给出的消息将被显示。在junit中每个assert函数都有第一个参数是出错时显示消息的函数原型。
4) - 测试所有可能引起失败的地方,如:一个类中频繁改动的函数。对于那些仅仅只含有getter/setter的类,如果是由IDE(如Eclipse)产生的,则可不测;如果是人工写,那么最好测试一下。
5) - 在setUp和tearDown中的代码不应该是与测试方法相关的,而应该是全局相关的。如针对与测试方法A和B,在setUp和tearDown中的代码应该是A和B都需要的代码。
6) - 测试代码的组织:相同的包,不同的目录。这样,测试代码可以访问被测试类的protected变量/方法,方便测试代码的编写。放在不同的目录,则方便了测试代码的管理以及代码的打包和发布。如下:
Src//源代码根目录
--com
--mod1
--class1
Junit//测试代码根目录
--com
--mod1
--class1
2. Junit进行单元测试的本质:
1) 执行setup()方法:初始化测试方法所需要的测试环境;所以一般将执行各个测试方法时所需的初始化工作放在其中,而不放在该测试类的构造方法中;
2) 执行测试方法:启动Junit test runner来运行各个测试方法;
3) 执行teardown()方法:在每个测试方法被调用之后被调用,负责撤销测试环境;
3. Assert与Fail书写规则:
(1) 事实上在Junit 中使用try-catch 来捕获异常是没有必要的,Junit 会自动捕获异常。那些没有被捕获的异常就被当成错误处理。所以上面的代码很冗余,完全可以写成下面等效却简洁得多的代码:
public void exampleTest () throws SomeApplicationException {
// do some test
}
(2) Junit 有丰富而灵活的assert/fail 方法,如何用好这些方法也是大有讲究的。比如下面的写法就不大好:assert (creds == 3);不如写成assertEquals ("The number of credentials should be 3", 3, creds);第二种写法不仅易于阅读,而且在执行时如果fail 也可以向测试人员提供更多的信息。Junit 也有支持浮点数的assert方法,干净利索如下例assertEquals ("some message", result, expected, delta);
(3) assertSame()用来测试两个引用是否指向同一个对象
assertEquals()用来测试两个对象是否相等
Junit学习小结
猜你喜欢
转载自xunbingjin.iteye.com/blog/616985
今日推荐
周排行