EassyMock實踐 自定義引數匹配器

2021-09-02 09:58:00 字數 2901 閱讀 4899

雖然easymock中提供了大量的方法來進行引數匹配,但是對於一些特殊場合比如引數是複雜物件而又不能簡單的通過equals()方法來比較,這些現有的引數匹配器就無能為力了。easymock為此提供了iargumentmatcher 介面來讓我們實現自定義的引數匹配器。

我們還是用例子來說話:

要測試的介面

package

mocktest;

public

inte***ce

service

引數型別定義

package

mocktest;

public

class

request

public

string getvalue1()

public

string getvalue2()

public

void setcondition(boolean

condition)

public

void

setvalue1(string value1)

public

void

setvalue2(string value2)

public request(boolean

condition, string value1, string value2)

}

package

mocktest;

public

class

mdata

public

string tostring()

}

自定義匹配器

假設在我們的這個單獨的測試案例中,我們有以下引數匹配邏輯: 如果condition為true,則只需要比較value1;如果condition為false,則只需要比較value2. 由於這個邏輯和預設的equals方法不一致,因此我們不能直接使用equals方法,只能實現自己的引數匹配器。

package

mocktest;

import

org.easymock.easymock;

import

org.easymock.iargumentmatcher;

public

class requestmatcher implements

iargumentmatcher

@override

public

void

}@override

public

boolean

matches(object argument)

request request =(request) argument;

if(condition)

else

}public

static request requestequals(boolean

condition, string expectedvalue)

}

equalsmdata是為了演示當引數是物件陣列的時候怎麼實現引數匹配的.關鍵是要把object物件強制性轉換為物件陣列.

package

mocktest;

import

org.easymock.easymock;

import

org.easymock.iargumentmatcher;

//實現iargumentmatcher介面

class equalsmdata implements

iargumentmatcher

public

static

mdata zsmdataequals(mdata expect)

@override

//這個方法實現匹配引數的邏輯

public

boolean matches(object argument)

}return

true

; }

@override

//這個方法是匹配錯誤後要列印的資訊

public

void

//todo auto-generated method stub

for (int i = 0; i < expect.length; i++)

for (int j = 0; j < actual.length; j++) }}

測試

package

mocktest;

import org.easymock.*;

import org.junit.*;

import

static org.easymock.easymock.*;

public

class

testeasymock ;

request request = new request(expectedcondition, "aaa", "ccc");

//引數匹配器每次只能實現乙個引數匹配,所以對於多個引數,要實現多個自定義匹配器

service.execute(

requestmatcher.requestequals(expectedcondition, expectedvalue),

equalsmdata.zsmdataequals(datas), anyint());

easymock.expectlastcall();

easymock.replay(service);

//mdata datas2 = ;

service.execute(request, datas, 1);

easymock.verify(service);}}

MUI自定義事件傳參

在mui中頁面之間的傳參一般是分為兩種的,一種是通過開啟頁面或者預載入頁面的時候傳遞引數,另一種就是自定義事件了,我們來說說自定義事件傳參的問題 我們來分兩種情況 一,頁面已經存在的時候 這種情況是很容易的,直接就是mui.fire 目標頁面,事件名稱,二,頁面是新建立的 如果你是這麼寫的話 var...

mybatis自定義傳參排序

getvirtualtaskdetailandinfo parametertype map resulttype map select t.id,t.task num,t.province,t.city,t.status t.create time,t.enable time,t.end time,...

自定義指令函式傳參

vue 2.6.6 繫結函式傳參 傳參多個多樣 引數動態變化 1.採用傳物件方式 binding.value 測試 const mydirective export default mydirective以上解決了問題1.繫結函式傳參,對於問題2.傳參多個多樣可以給args乙個物件,或者用陣列 測試...