<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 胡鵬 閱讀(865) 評論(0)  編輯  收藏


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


    網站導航:
     

    導航

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

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久99热精品免费观看动漫| 在线播放免费播放av片| 91嫩草亚洲精品| va亚洲va日韩不卡在线观看| a级毛片100部免费观看| ass亚洲**毛茸茸pics| 亚洲Av无码乱码在线观看性色 | 亚洲国产第一页www| 免费观看无遮挡www的小视频| 国产尤物在线视精品在亚洲| 亚洲国产日韩在线视频| 毛片基地免费观看| 久久久久免费视频| 亚洲人精品亚洲人成在线| 在线精品亚洲一区二区小说| 成人无码区免费视频观看| 中国一级特黄高清免费的大片中国一级黄色片 | 一级成人a毛片免费播放| 亚洲国产无线乱码在线观看 | 亚洲AV无码之日韩精品| 在线观看免费中文视频| eeuss草民免费| 亚洲欧美日韩国产成人| 久久精品亚洲中文字幕无码麻豆 | 亚洲综合久久1区2区3区 | 亚洲一区二区三区深夜天堂| 亚洲小说区图片区另类春色| 黄a大片av永久免费| 亚洲视频免费在线播放| 久久www免费人成看国产片| 亚洲最大的成人网站| 久久久久久亚洲精品成人| 中文字幕中韩乱码亚洲大片| 日韩一区二区三区免费体验| 亚洲一区二区免费视频| 人妻在线日韩免费视频| 一区二区三区免费看| 美国免费高清一级毛片| 亚洲另类无码专区首页| 亚洲一级免费毛片| 亚洲精品美女久久久久|