在eclipse开发工具中使用JUnit4进行单元测试详解(二)提高篇

时间:2022-11-10 05:07:48

本文是在前人的基础上完善而成http://blog.csdn.net/andycpp/article/details/1327346

通过上一篇文章我们成功的在eclipse开发工具中生成了一个JUnit4测试框架,下面我们来分析一下这个测试框架中的每个细节,以便于对JUnit单元测试框架有个更深入的了解。

一、测试类CalculatorTest相对于待测类Calculator的放置方式

采用并行树的方式进行放置,即测试类和待测类放于同一个包(com.edward.junit)中,但位于不同的源代码(src与test)树下,而这两棵树的根都在编译器的class-path(同属项目JUnitTestProject)中。这样既能保证测试类CalculatorTest能够访问待测类Calculator中的protected成员变量和方法,又能保证测试代码与待测代码的相对独立性,避免测试代码到处都是,堆积在待测代码目录中易于待测代码混淆。

在eclipse开发工具中使用JUnit4进行单元测试详解(二)提高篇


二、测试类的声明

在JUnit4中测试类的声明相对比较灵活,是一个独立的类,没有任何父类,但在JUnit3之前,则要求测试类必须继承自TestCase类。

测试类的名字也可以任意命名,没必要像JUnit3之前的那样,必须以Test结尾,但为了体现代码的规范性还是建议测试类以Test结尾。

测试类必须是公有类必须用public关键字修饰,这点与JUnit3之前是一样的,否则测试类将不被执行。

三、创建并初始化待测类的对象

首先,要测试哪个类就先声明一个该类的引用

private Calculator calculator = null;//一、创建被测对象

然后,在setUp()方法中,初始化待测类的对象

@Before
public void setUp() throws Exception {
//生成成员变量实例
calculator = new Calculator();//二、初始化被测对象
}

由于@Before标注的setUp()方法会在本类中每个测试方法执行之前都要执行一遍,这样可保证执行每个测试方法时,都有一个新的对象去掉用待测类的待测方法,保证各测试方法运行的独立性,避免不同的待测方法被同一待测类的对象调用时,相互干扰,影响待测方法的输出结果,造成测试失败。

四、测试方法的声明

在JUnit3之前测试方法的声明,存在四项必须准守的准则,即

    1、测试方法必须是共有的(public关键字修饰)

    2、测试方法的返回值必须被声明为void.

    3、测试方法的方法名的前置名词必须是test.

    4、测试方法不能传入任何参数。

但在JUnit4中,由于采用了java5中的新特性Annotation(注解)简化了测试方法的编写,测试方法的方法名的前置名词不用必须是test,只要以@Test元数据来标记即可,但为了体现代码的规范性和可读性,还是建议加上前置名词test。

五、测试方法的编写

    1、在测试方法上方用@Test进行标注,指明该方法为测试方法。

    2、用待测类的对象调用被测方法,取得方法的返回值或系统状态的变化

    3、创建“期待结果”

    4、调用合适的Assert方法,进行方法的返回值或系统状态的变化与期待结果的比较。

@Test//1、在测试方法上方用@Test进行标注,指明该方法为测试方法。
public void testMultiply() {
int result = calculator.multiply(2, 3);//2、用待测类的对象调用被测方法,取得方法的返回值或系统状态的变化
assertEquals(6, result);//3、创建“期待结果,即6;4、调用合适的Assert方法,进行方法的返回值或系统状态的变化与期待结果的比较。
}

六、项目中的导包;

import static org.junit.Assert.assertEquals;

1、Assert静态类是一系列断言方法的集合:Assert包含了一组静态的测试方法,用于实际值与期望值相比是否正确,如果错误,即测试失败,Assert类就会抛出一个AssertionFailedError异常,JUnit  测试框架将这种错误归入Failes并加以记录,同时标志为未通过测试。如果该  类方法中指定一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息,告诉测试人员此异常的详细信息。

2、Junit提供了6大类31组断言方法,包括基础断言、数字断言、字符断言、布尔断言、对象断言。

由于Assert类为静态类,所以我们在导包时,直接import static org.junit.Assert.assertEquals,这样我们在测试代码中可直接使用assertEquals(“期待结果”,运行结果)方法。