使用jMock輔助單元測試

使用jMock輔助單元測試

作者:冰雲
時間:
2004-04-16
聯繫:
icecloud(AT)sina.com
Bloghttp://icecloud.51.net

jMock是Junit的一個增強庫。源於http://www.jmock.org

jMock簡單易用,非常適合TDD中的Mock測試模式

首先我們來看一段簡單測試代碼

package name.nona.test.jmock;

import java.sql.SQLException;

import java.sql.Statement;

import org.jmock.Mock;

import org.jmock.MockObjectTestCase;

public class TestUsageOfJmock extends MockObjectTestCase {

    public void testDatabaseUseage() throws SQLException{

        Mock mockStmt = new Mock(Statement.class);

        String sql = "select * from test";

 

        mockStmt.expect(once()).method("execute")

.with(eq(sql)).will(returnValue(false));

        Statement stmt = (Statement) mockStmt.proxy();

        assertFalse(stmt.execute(sql));

      }

}

可以看到,上面是製作了一個假的(Mock)的Statement對象,

通過對這個對象的execute操作,返回一個false值。

 

其中,關鍵的語句是

mockStmt.expect(once()).method("execute").with(eq(sql)).will(returnValue(false));

解釋如下:

       expect: 期待的執行次數,可以有 onceatLeastOnce()notCalled()三種。

       method 期待調用的方法名,這裏是execute

       with 方法需要的參數,如果沒有的話就不用寫with,直接will

       will 返回值,沒有就不寫啦

       其中的once, eq, returnValue都是繼承自MockObjectTestCase的方法。

 

    執行後,Green,成功。嘗試兩次調用 assertFalse(stmt.execute(sql));  提示錯誤。

    

     jMock是通過CGLIB的DynamicProxy來實現的mock功能。

 

   

    注:本文僅是對jMock的一個簡單介紹,沒有太多內容。更多的東西需要你自己來探索,例如jMock的設計很有意思,使用了ValueObject模式等等。
   
如果對Jmock有興趣,請訪問http://www.jmock.org。 你可以下載最新的jMock包來使用,可能在接口上有些不同,但基本的調用已經定型不變(如上)。

    1.0stable的版本正在開發中,幫助很少,通過看JavaDoc和testCase你可以瞭解到最新的用法。

 

    


版權聲明:
本文由冰雲完成,首發於CSDN,作者保留中文版權。
未經許可,不得使用於任何商業用途。
歡迎轉載,但請保持文章及版權聲明完整。
如需聯絡請發郵件:icecloud(AT)sina.com
Blog:http://icecloud.51.net
 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章