亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人福利免费观看| 中文字幕久久久| 欧美日韩国产成人高清视频| 欧美日韩国产123| 国产98色在线| 日韩在线中文字| 亚洲成人在线视频播放| 欧美一区二区大胆人体摄影专业网站| 91热福利电影| 亚洲电影免费在线观看| 色婷婷av一区二区三区久久| www.日韩欧美| 日韩视频免费看| 91高清视频免费观看| 欧美午夜电影在线| 亚洲网在线观看| 欧美日韩成人网| 国产精品自产拍高潮在线观看| 66m—66摸成人免费视频| 久久视频国产精品免费视频在线| 久久中文字幕一区| 久久精品中文字幕免费mv| 亚洲性生活视频| 亚洲丝袜av一区| 久久色免费在线视频| 国内久久久精品| 亚洲三级 欧美三级| 久久精品国产96久久久香蕉| 亚洲福利视频网站| 久久久久久av| 亚洲成人av资源网| 一区二区成人精品| 亚洲一区二区中文字幕| 亚洲日本成人女熟在线观看| 色琪琪综合男人的天堂aⅴ视频| 欧美激情视频网址| 欧美制服第一页| 最近更新的2019中文字幕| www亚洲精品| 国产精品视频最多的网站| 精品福利在线看| 91精品久久久久久久久久久久久久| 精品毛片网大全| 欧美日韩一区二区在线| 亚洲国产精品yw在线观看| 久久久久久久国产精品视频| 欧美成人黑人xx视频免费观看| 日韩av在线天堂网| 91国内产香蕉| 亚洲成人网久久久| 日本成人免费在线| 热99精品里视频精品| 日韩成人中文电影| 日本国产欧美一区二区三区| 日韩精品在线免费观看视频| 国语自产精品视频在免费| 精品久久久久久中文字幕| 视频在线观看99| 久久久亚洲福利精品午夜| 亚洲色图五月天| 国产99久久精品一区二区 夜夜躁日日躁| 久久久久久噜噜噜久久久精品| 国产精自产拍久久久久久| 91精品视频播放| 92国产精品久久久久首页| 日韩成人av在线| 久久亚洲精品视频| 亚洲欧美三级伦理| 国产精品自拍偷拍视频| 午夜精品久久久久久99热| 欧美成人精品一区二区| 日韩欧美中文字幕在线观看| 国产精品色午夜在线观看| 成人福利视频在线观看| 久久影院在线观看| 精品美女永久免费视频| 成人精品久久一区二区三区| 亚洲japanese制服美女| 91沈先生作品| 88国产精品欧美一区二区三区| 欧美肥臀大乳一区二区免费视频| 久久国产精品久久国产精品| 九九热最新视频//这里只有精品| www日韩欧美| 日韩av免费在线观看| 欧美激情精品久久久久久变态| 91国内揄拍国内精品对白| 69久久夜色精品国产7777| 亚洲四色影视在线观看| 一区二区在线免费视频| 国模精品一区二区三区色天香| 国产亚洲欧美一区| 97涩涩爰在线观看亚洲| 久久久久久久久久国产| 国产精品自拍偷拍视频| 26uuu另类亚洲欧美日本老年| 色婷婷亚洲mv天堂mv在影片| 国产成人精品在线观看| 久久综合久久美利坚合众国| 亚洲欧美国产高清va在线播| xvideos亚洲| 日本精品中文字幕| 国产香蕉97碰碰久久人人| 国产福利精品视频| 午夜精品一区二区三区在线视频| 国产成人精品在线播放| 亚洲色图欧美制服丝袜另类第一页| 国产精品日韩在线| 日韩动漫免费观看电视剧高清| 国产美女直播视频一区| 日韩在线观看免费高清| 久久久久久久999| 欧美肥老妇视频| 4388成人网| 亚洲人午夜精品| 亚洲精品aⅴ中文字幕乱码| 亚洲激情视频网| 欧美午夜美女看片| 久久精视频免费在线久久完整在线看| 欧美另类老肥妇| 98视频在线噜噜噜国产| 欧美成人免费播放| 欧美做受高潮1| 日本道色综合久久影院| 欧美视频第一页| 高清欧美性猛交xxxx黑人猛交| 日本国产精品视频| 国产精品亚洲аv天堂网| 久久久成人精品视频| 国产成人在线视频| 亚洲free性xxxx护士hd| 国产精品久久久久久久久粉嫩av| 综合激情国产一区| 国产精品精品国产| 亚洲韩国欧洲国产日产av| 高跟丝袜一区二区三区| 日韩精品欧美激情| 久久国产精品久久久久久久久久| 国产婷婷成人久久av免费高清| 欧美又大粗又爽又黄大片视频| 亚洲精品不卡在线| 国产www精品| 久久久久日韩精品久久久男男| 国产精品高潮呻吟久久av野狼| 中文字幕免费国产精品| 国产精品久久久999| 国产日韩av高清| 亚洲电影免费观看高清完整版在线观看| 粉嫩老牛aⅴ一区二区三区| 日韩成人中文电影| 精品亚洲一区二区三区在线观看| 久久综合电影一区| 久久视频这里只有精品| 2021久久精品国产99国产精品| 97激碰免费视频| 亚洲精品白浆高清久久久久久| 亚洲成人黄色网| 国产成人精品免费久久久久| 亚洲人成啪啪网站| 国产精品丝袜视频| 久久综合久久美利坚合众国| 欧美日韩激情小视频| 国产日韩欧美电影在线观看| 精品久久久久国产|