麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-18 13:14:28
字體:
供稿:網(wǎng)友

  MockObject概述
  使用Mock Object進行測試,主要是用來模擬那些在應用中不輕易構(gòu)造(如HttpServletRequest必須在Servlet容器中才能構(gòu)造出來)或者比較復雜的對象(如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獲取開發(fā)包);
  
  3.獲取JMock V1.0(從http://www.jmock.org獲取JMock開發(fā)包)。
  
  4.為了開發(fā)方便,建議使用一個好IDE。以下例子中的代碼均是在Eclipse V3.0環(huán)境下進行的調(diào)試。
  
  例子一
  以下是一個簡單例子,代碼如下:
  
  package test1;
  
  import org.jmock.*;
  
  import javax.servlet.http.*;
  
  public class MockRequestTest extends MockObjectTestCase{
  
  public void testMockRequest1(){
  
  //構(gòu)造一個Mock對象
  
  Mock mock = new Mock(HttpServletRequest.class);
  
  //設置要執(zhí)行的操作,以下設置表示要調(diào)用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數(shù)是"name",期望的返回是"kongxx"
  
  mock.eXPects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
  
  //根據(jù)Mock對象獲取一個HttpServletRequest對象
  
  HttpServletRequest request = (HttpServletRequest)mock.PRoxy();
  
  //斷言調(diào)用結(jié)果
  
  assertEquals("kongxx" ,request.getParameter("name"));
  
  }
  
  public void testMockRequest2(){
  
  //構(gòu)造一個Mock對象
  
  Mock mock = new Mock(HttpServletRequest.class);
  
  //設置要執(zhí)行的操作,以下設置表示要調(diào)用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數(shù)是"name",期望的返回是"kongxx"
  
  mock.expects(once()).method("getParameter").with(eq("name")).will(returnValue("kongxx"));
  
  //根據(jù)Mock對象獲取一個HttpServletRequest對象
  
  HttpServletRequest request = (HttpServletRequest)mock.proxy();
  
  //調(diào)用HttpServletRequest對象的方法
  
  request.getParameter("name");
  
  //驗證執(zhí)行結(jié)果
  
  mock.verify();
  
  }
  
  }
  
  編譯并將其當做一個Test Case運行,會發(fā)現(xiàn)兩個測試方法均測試成功。
  
  例子二
  MyClass需要測試的類,提供了兩個方法getName和getPassWord,都使用HttpServletRequest作為輸入?yún)?shù)并返回從HttpServletRequest中取得的參數(shù),具體代碼如下:
  
  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測試類,其中構(gòu)造了一個假的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();
  
  //構(gòu)造一個Mock對象
  
  mockRequest = new Mock(HttpServletRequest.class);
  
  //根據(jù)Mock對象獲取一個HttpServletRequest對象
  
  request = (HttpServletRequest)mockRequest.proxy();
  
  }
  
  public void tearDown() {
  
  //TODO
  
  }
  
  public void testGetName(){
  
  //設置要執(zhí)行的操作,以下設置表示要調(diào)用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數(shù)是"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(){
  
  //設置要執(zhí)行的操作,以下設置表示要調(diào)用一次HttpServletRequest對象的
  
  //getParameter方法,傳遞的參數(shù)是"password",期望的返回是"123456789"
  
  mockRequest.expects(atLeastOnce()).method("getParameter").with(eq("password")).will(returnValue("123456789"));
  
  assertNotNull(myclass.getPassword(request));
  
  assertEquals("123456789" ,myclass.getPassword(request));
  
  }
  }
  
  編譯并將其當做一個Test Case運行,會發(fā)現(xiàn)兩個測試方法均測試成功。
  
  EasyMock
  簡介
  預備
  1.獲取J2SDK;
  
  2. 獲取JUnit V3.8.1(從http://www.junit.org獲取開發(fā)包);
  
  3.獲取EasyMock V1.1(從http://www.easymock.org獲取EasyMock開發(fā)包)。
  
  4.為了開發(fā)方便,建議使用一個好IDE。以下例子中的代碼均是在Eclipse V3.0環(huán)境下進行的調(diào)試。
  
  例子一
  以下是一個簡單例子,為了方便對比,這里重新實現(xiàn)了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(){
  
  //創(chuàng)建一個Mock HttpServletRequest的MockControl對象
  
  control = MockControl.createControl(HttpServletRequest.class);
  
  //獲取一個Mock HttpServletRequest對象
  
  mockRequest = (HttpServletRequest) control.getMock();
  
  //設置期望調(diào)用的Mock HttpServletRequest對象的方法
  
  mockRequest.getParameter("name");
  
  //設置調(diào)用方法期望的返回值,并指定調(diào)用次數(shù)
  
  //以下后兩個參數(shù)表示最少調(diào)用一次,最多調(diào)用一次
  
  control.setReturnValue("kongxx" ,1 ,1);
  
  //設置Mock HttpServletRequest的狀態(tài),
  
  //表示此Mock HttpServletRequest對象可以被使用
  
  control.replay();
  
  //使用斷言檢查調(diào)用
  
  assertEquals("kongxx",mockRequest.getParameter("name"));
  
  //驗證期望的調(diào)用
  
  control.verify();
  
  }
  
  }
  
  編譯并將其當做一個Test Case運行,會發(fā)現(xiàn)兩個測試方法均測試成功。
  
  例子二
  同例子一樣,對JMock例子二重新實現(xiàn)產(chǎn)生了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();
  
  //創(chuàng)建一個Mock HttpServletRequest的MockControl對象
  
  control = MockControl.createControl(HttpServletRequest.class);
  
  //獲取一個Mock HttpServletRequest對象
  
  mockRequest = (HttpServletRequest) control.g

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 99ri在线 | 特片网久久 | 亚洲一区二区免费视频 | 久久成人黄色 | 亚洲免费视频大全 | 主播粉嫩国产在线精品 | 精品一区二区三区中文字幕老牛 | 成人免费自拍视频 | 美女黄色影院 | 亚洲日本韩国在线观看 | 成人免费看视频 | 亚洲成人精品在线 | 欧美亚洲一级 | 日韩欧美色综合 | 成人一区三区 | 今井夏帆av一区二区 | 日日草夜夜操 | 精品一区二区在线播放 | 99成人在线| 免费观看三级毛片 | 欧美a∨一区二区三区久久黄 | 日韩大片在线永久观看视频网站免费 | 动漫孕妇被羞羞视频 | 亚洲日本欧美 | 国产精品99久久久久久久 | 国产高潮国产高潮久久久91 | 国产一国产精品一级毛片 | 成人一级视频 | 中国性xxx | 久久国产精品影视 | 国产一级aa大片毛片 | 国产精品99久久久久久久女警 | 神秘电影91 | 日韩蜜桃视频 | 久久精品伊人网 | 在线视频观看一区二区 | 欧美日韩一区,二区,三区,久久精品 | 亚洲精品动漫在线观看 | av成人免费看 | 成人午夜淫片a | 午夜小视频免费观看 |