国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Mock 概述以及用 Mock Object 進行測試

2019-11-18 13:14:28
字體:
來源:轉載
供稿:網友

  MockObject概述
  使用Mock Object進行測試,主要是用來模擬那些在應用中不輕易構造(如HttpServletRequest必須在Servlet容器中才能構造出來)或者比較復雜的對象(如JDBC中的ResultSet對象)從而使測試順利進行的工具。
  
  目前,在java陣營中主要的Mock測試工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微軟的.Net陣營中主要是Nmock,.NetMock等。
  
  以下就對在Java中使用的Mock Object進行測試的常用工具做一下使用說明。
  
  JMock
  簡介
  預備
  1.獲取J2SDK;
  
  2.獲取JUnit V3.8.1(從http://www.junit.org獲取開發包);
  
  3.獲取JMock V1.0(從http://www.jmock.org獲取JMock開發包)。
  
  4.為了開發方便,建議使用一個好IDE。以下例子中的代碼均是在Eclipse V3.0環境下進行的調試。
  
  例子一
  以下是一個簡單例子,代碼如下:
  
  package test1;
  
  import org.jmock.*;
  
  import javax.servlet.http.*;
  
  public class MockRequestTest extends MockObjectTestCase{
  
  public void testMockRequest1(){
  
  //構造一個Mock對象
  
  Mock mock = new Mock(HttpServletRequest.class);
  
  //設置要執行的操作,以下設置表示要調用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數是"name",期望的返回是"kongxx"
  
  mock.eXPects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
  
  //根據Mock對象獲取一個HttpServletRequest對象
  
  HttpServletRequest request = (HttpServletRequest)mock.PRoxy();
  
  //斷言調用結果
  
  assertEquals("kongxx" ,request.getParameter("name"));
  
  }
  
  public void testMockRequest2(){
  
  //構造一個Mock對象
  
  Mock mock = new Mock(HttpServletRequest.class);
  
  //設置要執行的操作,以下設置表示要調用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數是"name",期望的返回是"kongxx"
  
  mock.expects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
  
  //根據Mock對象獲取一個HttpServletRequest對象
  
  HttpServletRequest request = (HttpServletRequest)mock.proxy();
  
  //調用HttpServletRequest對象的方法
  
  request.getParameter("name");
  
  //驗證執行結果
  
  mock.verify();
  
  }
  
  }
  
  編譯并將其當做一個Test Case運行,會發現兩個測試方法均測試成功。
  
  例子二
  MyClass需要測試的類,提供了兩個方法getName和getPassWord,都使用HttpServletRequest作為輸入參數并返回從HttpServletRequest中取得的參數,具體代碼如下:
  
  package test2;
  
  import javax.servlet.http.*;
  
  public class MyClass {
  
  public String getName(HttpServletRequest request) {
  
  return request.getParameter("name");
  
  }
  
  public String getPassword(HttpServletRequest request) {
  
  return request.getParameter("password");
  
  }
  
  }
  
  TestMyClass測試類,其中構造了一個假的HttpServletRequest對象,用來測試MyClass中的getName和getPassword方法,代碼如下:
  
  package test2;
  
  import org.jmock.*;
  
  import javax.servlet.http.*;
  
  public class TestMyClass extends MockObjectTestCase{
  
  private MyClass myclass ;
  
  private Mock mockRequest ;
  
  private HttpServletRequest request ;
  
  public void setUp() {
  
  myclass = new MyClass();
  
  //構造一個Mock對象
  
  mockRequest = new Mock(HttpServletRequest.class);
  
  //根據Mock對象獲取一個HttpServletRequest對象
  
  request = (HttpServletRequest)mockRequest.proxy();
  
  }
  
  public void tearDown() {
  
  //TODO
  
  }
  
  public void testGetName(){
  
  //設置要執行的操作,以下設置表示要調用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數是"name",期望的返回是"kongxx"
  
  mockRequest.expects(atLeastOnce()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
  
  assertNotNull(myclass.getName(request));
  
  assertEquals("kongxx" ,myclass.getName(request));
  
  }
  
  public void testGetPassword(){
  
  //設置要執行的操作,以下設置表示要調用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數是"password",期望的返回是"123456789"
  
  mockRequest.expects(atLeastOnce()).method("getParameter").with(eq("password")).will(returnValue("123456789"));
  
  assertNotNull(myclass.getPassword(request));
  
  assertEquals("123456789" ,myclass.getPassword(request));
  
  }
  }
  
  編譯并將其當做一個Test Case運行,會發現兩個測試方法均測試成功。
  
  EasyMock
  簡介
  預備
  1.獲取J2SDK;
  
  2. 獲取JUnit V3.8.1(從http://www.junit.org獲取開發包);
  
  3.獲取EasyMock V1.1(從http://www.easymock.org獲取EasyMock開發包)。
  
  4.為了開發方便,建議使用一個好IDE。以下例子中的代碼均是在Eclipse V3.0環境下進行的調試。
  
  例子一
  以下是一個簡單例子,為了方便對比,這里重新實現了JMock例子一,代碼如下:
  
  package test1;
  
  import org.easymock.*;
  
  import junit.framework.*;
  
  import javax.servlet.http.*;
  
  public class MockRequestTest extends TestCase{
  
  private MockControl control;
  
  private HttpServletRequest mockRequest;
  
  public void testMockRequest(){
  
  //創建一個Mock HttpServletRequest的MockControl對象
  
  control = MockControl.createControl(HttpServletRequest.class);
  
  //獲取一個Mock HttpServletRequest對象
  
  mockRequest = (HttpServletRequest) control.getMock();
  
  //設置期望調用的Mock HttpServletRequest對象的方法
  
  mockRequest.getParameter("name");
  
  //設置調用方法期望的返回值,并指定調用次數
  
  //以下后兩個參數表示最少調用一次,最多調用一次
  
  control.setReturnValue("kongxx" ,1 ,1);
  
  //設置Mock HttpServletRequest的狀態,
  
  //表示此Mock HttpServletRequest對象可以被使用
  
  control.replay();
  
  //使用斷言檢查調用
  
  assertEquals("kongxx",mockRequest.getParameter("name"));
  
  //驗證期望的調用
  
  control.verify();
  
  }
  
  }
  
  編譯并將其當做一個Test Case運行,會發現兩個測試方法均測試成功。
  
  例子二
  同例子一樣,對JMock例子二重新實現產生了EasyMock的例子二。
  
  需要測試的類代碼如下:
  
  package test2;
  
  import javax.servlet.http.*;
  
  public class MyClass {
  
  public String getName(HttpServletRequest request) {
  
  return request.getParameter("name");
  
  }
  
  public String getPassword(HttpServletRequest request) {
  
  return request.getParameter("password");
  
  }
  
  }
  
  測試類代碼如下:
  
  package test2;
  
  import org.easymock.*;
  
  import junit.framework.*;
  
  import javax.servlet.http.*;
  
  public class TestMyClass extends TestCase{
  
  private MockControl control;
  
  private HttpServletRequest mockRequest;
  
  private MyClass myclass ;
  
  public void setUp() {
  
  myclass = new MyClass();
  
  //創建一個Mock HttpServletRequest的MockControl對象
  
  control = MockControl.createControl(HttpServletRequest.class);
  
  //獲取一個Mock HttpServletRequest對象
  
  mockRequest = (HttpServletRequest) control.g

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐清市| 都江堰市| 五河县| 宜阳县| 嘉兴市| 久治县| 丘北县| 德兴市| 微博| 扬州市| 连州市| 洪江市| 汶川县| 武宣县| 林州市| 汽车| 酒泉市| 岑巩县| 隆安县| 体育| 乡城县| 明水县| 海南省| 青海省| 临颍县| 同德县| 谢通门县| 秦安县| 承德县| 济宁市| 通城县| 岳阳市| 紫金县| 泰顺县| 临武县| 巨野县| 黄大仙区| 崇阳县| 吉首市| 日土县| 克什克腾旗|