<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JMock的基本使用方法

    JMock是幫助創建mock對象的工具,它基于Java開發,在Java測試與開發環境中有不可比擬的優勢,更重要的是,它大大簡化了虛擬對象的使用。本文中,通過一個簡單的測試用例來說明JMock如何幫助我們實現這種孤立測試。
        我們在測試某類時,由于它要與其他類發生聯系,因此往往在測試此類的代碼中也將與之聯系的類也一起測試了。這種測試,將使被測試的類直接依賴于其他類,一旦其他類發生改變,被測試類也隨之被迫改變。更重要的是,這些其他類可能尚未經過測試,因此必須先測試這些類,才能測試被測試類。這種情況下,測試驅動開發成為空談。而如果其他類中也引用了被測試類,我們到底先測試哪一個類?因此,在測試中,如果我們能將被測試類孤立起來,使其完全不依賴于其他類的具體實現,這樣,我們就能做到測試先行,先測試哪個類,就先實現哪個類,而不管與之聯系的類是否已經實現。

        虛擬對象(mock object)就是為此需要而誕生的。它通過JDK中的反射機制,在運行時動態地創建虛擬對象。在測試代碼中,我們可以驗證這些虛擬對象是否被正確地調用了,也可以在明確的情況下,讓其返回特定的假想值。而一旦有了這些虛擬對象提供的服務,被測試類就可以將虛擬對象作為其他與之聯系的真實對象的替身,從而輕松地搭建起一個很完美的測試環境。

        JMock是幫助創建mock對象的工具,它基于Java開發,在Java測試與開發環境中有不可比擬的優勢,更重要的是,它大大簡化了虛擬對象的使用。

        本文中,通過一個簡單的測試用例來說明JMock如何幫助我們實現這種孤立測試。有三個主要的類,User,UserDAO,及UserService。本文中,我們只需測試UserService,準備虛擬UserDAO。對于User,由于本身僅是一個過于簡單的POJO,可以不用測試。但如果你是一個完美主義者,也可以使用JMock的虛擬它。在這領域,JMock幾乎無所不能。

    這里我用到的是:(我用的是maven依賴)

                <dependency>
       <groupId>org.jmock</groupId>
       <artifactId>jmock</artifactId>
       <version>2.5.1</version>
    </dependency>
     
    <dependency>
       <groupId>org.jmock</groupId>
       <artifactId>jmock-junit3</artifactId>
       <version>2.5.1</version>
    </dependency>

    在官方的網站上也有的下載。   地址:  http://jmock.org/dist/jmock-2.5.1-jars.zip

     


    public class User {
    private String name;
    public User() {
    }
    public User(String name) {
    this.name = name;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }

     UserDAO負責與數據庫打交道,通過數據庫保存、獲取User的信息。盡管我們可以不用知道JMock如何通過JDK 的反射機制來實現孤立測試,但至少應知道,JDK的反射機制要求這些在運行時創建的動態類必須定義接口。在使用JMock的環境中,由于我們要虛擬 UserDAO,意味著UserDAO必須定義接口

    public interface UserDAO {
    public User getUser(Long id);
    }

    public interface UserService {
    public void setUserDAO(UserDAO userDAO);
    public User getUser(Long id);
    }



    public class UserServiceImpl implements UserService {
    private UserDAO userDAO;
    public UserServiceImpl() {
    }
    public void setUserDAO(UserDAO userDAO) {
    this.userDAO = userDAO;
    }
    public User getUser(Long id) {
    return userDAO.getUser(id);
    }
    }


     
    import org.jmock.Expectations;
    import org.jmock.integration.junit3.MockObjectTestCase;

    public class UserServiceTest extends MockObjectTestCase {
    private UserService userService = new UserServiceImpl();
    private UserDAO userDAO = null;
    public UserServiceTest(String testName) {
    super(testName);
    }
    protected void setUp() throws Exception {
    userDAO = mock(UserDAO.class);
    userService.setUserDAO(userDAO);
    }
    public void testGetUser() {
    String name = "lsb";
    final User fakeUser = new User(name);
    checking(new Expectations(){{
                oneOf(userDAO).getUser(1L);
                will(returnValue(fakeUser));
            }});
    User user = userService.getUser(1L);
    assertNotNull(user);
    assertEquals(name, user.getName());
    }
    protected void tearDown() throws Exception {
    }
    }

    posted on 2012-02-23 21:52 胡鵬 閱讀(864) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2012年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    26272829123
    45678910

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久香草视频在线观看免费| 国产成人高清精品免费鸭子| 国产曰批免费视频播放免费s| 精品女同一区二区三区免费站| 成年女人免费v片| 国产免费牲交视频| 亚洲av无码成人黄网站在线观看| 亚洲综合久久一本伊伊区| 国产精品亚洲а∨无码播放麻豆 | 国产一区视频在线免费观看| 国产国拍精品亚洲AV片| 亚洲日韩在线视频| 日韩亚洲综合精品国产| 久久免费福利视频| 国产午夜鲁丝片AV无码免费| 日本红怡院亚洲红怡院最新| 亚洲中文字幕无码中文字| 精品久久久久久国产免费了| 四虎精品视频在线永久免费观看| 日本中文一区二区三区亚洲 | 亚洲真人日本在线| 亚洲欧洲尹人香蕉综合| 一区二区三区免费在线视频| 亚洲一级免费毛片| 国产午夜亚洲不卡| 亚洲午夜无码毛片av久久京东热| a毛片免费全部播放完整成| 免费黄色小视频网站| 伊人久久综在合线亚洲2019| 欧洲精品码一区二区三区免费看| 一个人看www在线高清免费看 | 97se亚洲综合在线| 国产91成人精品亚洲精品| 最近免费视频中文字幕大全| 亚洲麻豆精品国偷自产在线91| 亚洲一日韩欧美中文字幕在线| 男人都懂www深夜免费网站| 亚洲人成色77777在线观看大| 亚洲伊人久久大香线蕉AV| 18禁男女爽爽爽午夜网站免费| 亚洲中文字幕在线第六区|