(三) 单元测试(JUnit3/JUnit4)

单元测试属于白盒测试

JUnit3.x是针对于Java5之前的版本,没有注解,需要按照规范来写测试。JUnit4.x是针对于Java5以及之后的版本,使用注解。

一、使用junit3.x的步骤:

  1. 在项目中添加junit3.x的测试jar:项目-->Build Path-->Add Libraries...;
  2. 定义一个测试类,并让该测试类继承于TestCase类,测试类命名:XxxTest
  3. 在XxxTest中编写测试方法,如: public void testXxx() throws Exception{ }。注意:方法是public修饰的,无返回的,必须以test作为方法的前缀,Xxx表示测试的功能名字;
  4. 选择某一个测试方法运行run as junit。
  5. 若在测试前进行初始化要覆写TestCase的protected void setUp() throws Exception{ }方法;
  6. 若在测试后进行销毁要覆写TestCase的protected void tearDown() throws Exception{ }方法;

          执行顺序:setUp-->测试方法-->tearDown-->setUp-->测试方法2-->tearDown-->...

测试举例:

//EmployeeDAOTest组件的测试类
public class EmployeeDAOTest extends TestCase{
	//初始化操作
	protected void setUp() throws Exception{
		System.out.println("初始化");
	}
	
	//销毁
	protected void tearDown() throws Exception{
		System.out.println("销毁");
	}
	
	//测试员工的保存操作
	public void testSave() throws Exception{
		System.out.println("员工保存");
	}
	
	//测试员工的删除操作
	public void testDelete() throws Exception{
		System.out.println("员工删除");
	}
	
}

运行结果:初始化
                  员工保存
                  销毁
                  初始化
                  员工删除
                  销毁

二、使用junit4.x的步骤:

  1. 在项目中添加junit4.x的测试jar:项目-->Build Path-->Add Libraries...;
  2. 定义一个测试类(不用继TestCase类),测试类名字:XxxTest;
  3. 在XxxTest中编写测试方法:

    @Test

    public void testXxx() throws Exception{ } 注意:方法是public修饰的,无返回的,必须有@Test标签,Xxx表示测试的功能名;

  4. 选择某一个测试方法运行run as junit。
  5. 若在测试前进行初始化要定义一个方法,并贴上@Before标签;
  6. 若在测试前进行销毁要要定义一个方法,并贴上@After标签;
  7. @BeforeClass:在所有的Befoer之前,只在最开始执行一次,方法必须用static修饰;
  8. @AfterClass:在所有的After之后,只在最后执行一次,方法必须用static修饰。

测试举例:

public class EmployeeDAOTest {

	@BeforeClass
	public static void init1() throws Exception {
		System.out.println("初始化1");
	}

	@AfterClass
	public static void destroy1() throws Exception {
		System.out.println("销毁1");
	}
	@Before
	public void init() throws Exception {
		System.out.println("初始化");
	}

	@After
	public void destroy() throws Exception {
		System.out.println("销毁");
	}

	@Test
	public void testSave() throws Exception {
		System.out.println("员工保存");
	}

	@Test
	public void testDelete() throws Exception {
		System.out.println("员工删除");
	}

}

   运行结果:初始化1
                     初始化
                     员工保存
                     销毁
                     初始化
                     员工删除
                     销毁
                     销毁1

三、使用断言做测试

期望值:断言时希望是多少;

真实值:程序内部运算之后实际是多少;

断言成功:期望值和真实值相同,显示绿条;

断言失败:期望值和真实值不同,显示红条。

               (不使用断言,红条和绿条没什么大的意义)

                                        断言                                                             功能
Assert.assertEquals(message, excepted, actual)         

比较的值

message 断言失败的提示信息,断言成功不显示
excepted 期望值
actual 真实值

Assert.assertSame(message, excepted, actual)   

比较地址,断言是同一个对象

Assert.assertNotSame(message, excepted, actual) 比较地址,断言不是同一个对象
Assert.assertTrue(message,condition) 断言condition应该为TRUE
Assert.assertFalse(message,condition) 断言condition应该为FALSE
Assert.assertNull(message,Object) 断言对象为null
Assert.assertNotNull(message,Object) 断言对象为不为null
@Test(excepted=ArithmeticException.class) 断言该方法报错:ArithmeticException
@Test(timeout = 400) 期望该方法在400毫秒之内执行完成

代码示例:

//Math测试类
public class MathTest {

	// 依赖关系:表明要测试的对象是谁
	private IMath math = new MathImpl();

	@Test
	public void testAdd() {
		int ret = math.add(1, 2);
		// 使用断言方式
		Assert.assertEquals("结果错误", 4, ret);
	}

	@Test
	public void testDivide() {
		int ret = math.divide(12, 3);
		Assert.assertEquals(4, ret);
	}

}

猜你喜欢

转载自blog.csdn.net/FionaCang/article/details/89668094