junit单元测试

单元测试

断言的使用

assertEquals(String message, int expected, int actual)

message:可选,如果提供的话,将会在发生错误的时候报告这个消息
expected:是你的期望值,一般是硬编码的
actual:是被测试代码实际产生的值

assertNotNull(String message, Object object)

assertNull(String message, Object object)

验证一个对象是否为null(notNull),如果为null(notNull),则测试失败,message为可选

assertSame(String message, Object expected, Object actual)

验证一个expected参数和actual参数所应用的对象是否是同一个对象,如果不是,测试失败,message可选
assertNotSame(String message, Object expected, Object actual)
验证一个expected参数和actual参数所应用的对象是否不是同一个对象,如果是,测试失败,message可选	

assertTrue(String message,boolean condition)

验证表达式的值是不是为Ture,如果不为真,测试失败
assertFalse(String message, boolean condition)
样子表达式的值是不是false,如果不为false,测试失败,message可选

Setup和TearDown

Setup方法在测试方法执行前执行,一般用来申请系统资源,或者初始化类和数据使用
TearDown方法在测试方法执行之后自信,一般用来释放系统资源

测试异常

假设我们测试sortList()方法,我们希望在测试为null的情况下,方法能够抛出正常的异常



	public void testForException(){
		
		try{
			sortList(null);
			fail("should have thrown an exception");
		
		}catch(Exception e){
			assertTure(ture);
		}
	} 

测试应该遵循的原则--Right-BICEP

	Right: 	结果是否**正确**
	B:		是否所有的**边界**条件都是正确的
	I:		能查一下**反向**关联吗
	C:		能用其他手段**交叉检查**一下结果吗
	E:		你是否可以强制**错误条件**发生
	P:		能否满足**性能**要求

Mock对象

	在单元测试中,我们常遇到的问题是应用中其它的协同模块尚未开发完成,或者被测试模块需要和一些不容易构造、比较复杂的对象进行交
	互另外,由于不能肯定其它模块的正确性,我们也无法确定测试中发现的问题是由哪个模块引起的。Mock 对象能够模拟其它协同模块的行
	为,被测试模块通过与 Mock 对象协作,可以获得一个孤立的测试环境。此外,使用 Mock 对象还可以模拟在应用中不容易构造(如 
	HttpServletRequest 必须在 Servlet 容器中才能构造出来)和比较复杂的对象(如 JDBC 中的 ResultSet 对象),从而使测试
	顺利进行。
	
	使用servlet来举例
	
public class ResultServletTest {  

private AwardResultServlet servlet;  
private HttpServletRequest mockRequest;  
private HttpServletResponse mockResponse;  
  
@Before  
public void setUp(){  
    servlet = new ResultServlet();  
      
    mockRequest = createMock(HttpServletRequest.class);         //加载  
    mockResponse = createMock(HttpServletResponse.class);  
}  
  
@After  
public void tearDown(){  
    verify(mockRequest);        //验证  
    verify(mockResponse);  
}  
  
  
@Test  
public void testDoPostHttpServletRequestHttpServletResponse() throws ServletException, IOException {  
      
    mockRequest.getParameter("id");         //传入参数  
    expectLastCall().andReturn("1");  
      
    mockRequest.getParameter("name");       //传入参数  
    expectLastCall().andReturn("chevy");  
      
    mockRequest.getParameter("gender");     //传入参数  
    expectLastCall().andReturn("男");  
      
    replay(mockRequest);                    //回放  
    replay(mockResponse);  
      
    servlet.doPost(mockRequest, mockResponse);  //调用  
              
}  

}
原文地址:https://www.cnblogs.com/j2eeDevelper/p/5320400.html