置頂 EasyMock的簡單使用

2021-09-06 11:23:43 字數 3862 閱讀 1514

下面,我將講述如何使用junit和easymock框架來進行單元測試。

在現實情況下,我們通常是在一些類裡使用另外的一些類。在進行真正的測試之前,你可能需要做很多的工作,比喻說安置大量的環境**,啟動一種大型的、複雜的系統,可能是資料庫、功過劉或者是某一種型別的ide環境,你的預設環境**需要是系統進入某種特定的狀態,以便按照測試所需要的方法進行響應。但是這種工作不大可能很快就能完成。

為了對一部分類進行單元測試,你需要建立和控制另外一些類。最好的辦法就是為需要測試的類建立乙個模擬物件。你可以自己手工的編寫類,也可以使用easymock來產生這些物件。

模擬物件提供了一種經過證明是成功的解決方案。當我們很難或不可能為某種難以處理的資源建立需要的狀態或者訪問某種資源受限時,你就可以使用模擬物件。

模擬物件取代真實物件的位置,用於測試一些與真實物件進行互動或依賴於真實物件的功能。模擬物件背後的基本思想就是建立輕量級的、可控制的物件來代替為了編寫測試為需要使用的物件。模擬物件還能夠讓你指定和測試你的**與模擬物件本身之間的互動。

說的再直白一點,乙個模擬物件就是乙個簡單的介面或者是類,在裡面你可以定義乙個特定的方法呼叫之後的簡單的輸出。

easymock的使用,需要兩個jar包,junit和easymock的jar包,

junit4.11:

easymock3.2:

package easymock.income;

/** * position類表示職位資訊,總共有三類:老闆,程式猿,管理員

*/public enum position

package easymock.income.method;

import easymock.income.position;

/** * 定義的計算工資的介面

* 並有乙個抽象方法:計算工資

*/public inte***ce icalmethod

package easymock.income;

import easymock.income.position;

import easymock.income.exception.calmethodexception;

import easymock.income.exception.positionexception;

import easymock.income.method.icalmethod;

/** * 收入(工資)計算的實現類,該類根據計算方法和職員的職位

* 計算該職員的工資

*/public class incomecaculator

public void setposition(position position)

public double cal()

//當職位為空時,拋職位為空異常

if(null == position)

//返回該職員的工資

return method.cal(position); }

}

package easymock.income;

import easymock.income.exception.calmethodexception;

import easymock.income.exception.positionexception;

import easymock.income.method.icalmethod;

/** * 收入(工資)計算的實現類,該類根據計算方法和職員的職位

* 計算該職員的工資

*/public class incomecaculator

public void setposition(position position)

public double cal()

//當職位為空時,拋職位為空異常

if(null == position)

//返回該職員的工資

return method.cal(position); }

}

以下是方法為空的異常類和職位為空的異常類:

package easymock.income.exception;

public class calmethodexception extends runtimeexception

}

package easymock.income.exception;

public class positionexception extends runtimeexception

}

package easymock;

import static org.junit.assert.assertequals;

import static org.junit.assert.fail;

import org.easymock.easymock;

import org.junit.before;

import org.junit.test;

import easymock.income.incomecaculator;

import easymock.income.position;

import easymock.income.exception.calmethodexception;

import easymock.income.exception.positionexception;

import easymock.income.method.icalmethod;

/** * easymock的使用步驟:

* 使用 easymock 生成 mock 物件

* 設定 mock 物件的預期行為和輸出;

* 將 mock 物件切換到 replay 狀態;

* 呼叫 mock物件方法進行單元測試; 對 mock 物件的行為進行驗證。

* */

public class easymocktest

@test

public void testcacl1() catch (positionexception e)

caculator.setposition(position.boss);

//判斷結果是否和預期的一樣

//第一次預期的執行

//這裡應該讓caculator.cal()方法執行兩次,這個次數和上面設定的次數一致

assertequals(caculator.cal(), 7000.0, 0);

assertequals(caculator.cal(), 7000.0, 0);

//第二次預期的執行

caculator.setposition(position.programmer);

assertequals(5000.0, caculator.cal(), 0);

caculator.setposition(position.manager);

//對 mock物件的行為進行驗證,驗證是否兩次預期都已執行

easymock.verify(calmethod);

} //測試能否丟擲計算方法為空的異常

@test(expected = calmethodexception.class)

public void testnocalc()

@test(expected = positionexception.class)

public void testnoposition()

@test(expected = positionexception.class)

public void testcalc2()

}

EasyMock的基本使用和本地安裝

官網 文件 docs 1.2.1 登入或註冊 訪問 後,點選 開始 後輸入使用者名稱和密碼。如果不存在會自動註冊。注意 沒有找回密碼功能,請牢記密碼!登入成功之後跳轉到如下頁面 1.2.2 建立專案 右下角 圖示進行建立專案 建立成功效果圖 1.2.3 介面配置 建立介面,點選左下角專案。進入專案工...

使用easymock及其擴充套件所做的單元測試

在前面版本中在對抽象類做mock時一般使用 private mockcontrol ctl private hibernatetemplate ht private basedaoimpl basedao protected void setup throws exception 但在easymoc...

置頂的功能sql

增加一列 這一列的備註說明資訊 alter table 表名 add 增加的列名 datetime comment 頂置 after 跟在哪乙個列後面 做頂置排序的時候增加一列 時間列 先看這個看這個頂置列是不是空的,將不為空的先 倒序,如果為空按照建立時間倒序排列 select from 表名 o...