01.junit4测试

一.测试环境

  1. 使用junit4.x:
    junit4.x基于Java5开始的版本,支持注解.

  2. 步骤:

    1. 把junit4.x的测试jar,添加到该项目中来;

    2. 定义一个测试类.
      测试类的名字: XxxTest XXX表示测试的功能名字.

    3. 在EmployeeDAOTest中编写测试方法:如

      @Test
         public void testXxx() throws Exception {
         }
      

      注意:方法是public修饰的,没有参数,无返回的,该方法上必须贴有@Test标签,Xxx表示测试的功能名字.

    4. 选择某一个测试方法,鼠标右键选择 [run as junit],或则选中测试类,表示测试该类中所有的测试方法.
      以后单元测试使用最多的方式:
      若要在测试方法之前做准备操作:
      EmployeeDAOTest随意定义一个方法并使用@Before标注:

      ```
      @Before
            public void xx() throws Exception方法
      ```
      

      若要在测试方法之后做回收操作:
      EmployeeDAOTest随意定义一个方法并使用@After标注:

      ```
      @After
            public void xx() throws Exception方法
      ```
      

    特点:每次执行测试方法之前都会执行Before方法,每次执行测试方法之后都会执行After方法;

    初始化一次,和最终销毁一次

    只能修饰静态方法

@BeforeClass标签:在所有的Before方法之前执行,只在最初执行一次.
  只能修饰静态方法
@AfterClass标签:在所有的After方法之后执行,只在最后执行一次.
  执行顺序: BeforeClass->(Before->Test-After多个测试方法)-->AfterClass

新建类EmployeeDAOTest

//模拟Junit4 单元测试
public class EmployeeDAOTest {
	/**
	 1)必须为public
	 2)必须为void
	 3)必须无参
	 4)XxxClass必须静态
	 */
	/*@Test
	private int testName(int i) throws Exception {
		System.out.println();
		return 0;
	}*/
	@BeforeClass
	public static void staticInit() {
		System.out.println("静态初始化");
	}
	@Before
	public void testInit() {
		System.out.println("初始化");
	}
	@Test
	public void testSave() {
		System.out.println("单元测试保存...");
	}
	@Test
	public void testDelete() throws Exception {
		System.out.println("单元测试删除...");
	}
	@After
	public void testRecover() {
		System.out.println("回收资源...");
		System.out.println("----------------");
	}
	@AfterClass
	public static void staticRecover() {
		System.out.println("静态回收资源...");
	}
}

二.断言

  1. 断言有:期望值,真实值,当真实值和期望值相同则断言成功,否则失败

  2. 步骤(基于接口测试):

    1. 写一个接口 --> IMath
    2. 写一个测试类测试接口中的方法 --> MathTest
    3. 写一个实现类实现接口
    4. 测试该接口的实现(解释依赖关系)
① :Assert.assertEquals(message, expected, actual):比较的值
    三个参数:
    message:  断言失败的提示信息,断言成功不会显示.
    expected: 期望值
    actual:   真实值
   若真实值和期望值想等,则断言成功.--->绿条
②:Assert.assertSame(message, expected, actual):比较地址,是同一个对象
  Assert.assertNotSame(message, expected, actual):断言不是同一个对象
③:Assert.assertTrue(message, condition):断言condition应该为TRUE.
④:Assert.assertFalse(message, condition):断言condition应该为FALSE.
⑤:Assert.assertNull(message, object):断言对象object为null.
⑥:Assert.assertNotNull(message, object):断言对象object不为null.
⑦:@Test(expected=ArithmeticException.class)
   期望该方法报错,报错ArithmeticException.
⑧:@Test(timeout=400)
   期望该方法在400毫秒之内执行完成.

新建接口IMath

//接口
public interface IMath {
	/**
	 * 求积方法
	 * 
	 * 返回类型:int	 
	 * 参数a:加数	  
	 * 参数b:加数	  
	 */
	public int add(int a, int b);
	/**
	 * 求商方法
	 * 
	 * 返回类型:int
	 * 参数a:被除数
	 * 参数b:除数
	 */
	public int divi(int a, int b);
}

新建类MathImpl

public class MathImpl implements IMath {

	@Override
	public int add(int a, int b) {
		return a + b;
	}

	@Override
	public int divi(int a, int b) {
		return a / b;
	}

}

新建类MathTest

public class MathTest {
	private final MathImpl math = new MathImpl();

	@Test
	public void testAdd() {
		int ret = math.add(2, 3);
		/**
		 * message: 断言失败的提示信息,断言成功不会显示. 
		 * expected: 期望值 
		 * actual: 真实值
		 */
		Assert.assertEquals("断言失败", 5, ret);
	}

	@Test
	public void testDivi() {
		int ret = math.divi(10, 2);
		Assert.assertEquals("断言失败", 5,ret);
	}
	//期望该方法报错,报错ArithmeticException.
	@Test(expected=ArithmeticException.class)
	public void testException() throws Exception {
		math.divi(10, 0);
	}
	//期望该方法在400毫秒之内执行完成.
	@Test(timeout=10)
	public void testTime() throws Exception {
		Thread.sleep(100);
	}
}
发布了82 篇原创文章 · 获赞 0 · 访问量 1328

猜你喜欢

转载自blog.csdn.net/huang_kuh/article/details/105492353