(八)同一方法呼叫返回時序結果 實戰篇

2021-09-13 18:25:32 字數 2344 閱讀 8145

有時候,我們需要對同一方法呼叫時,返回結果為乙個時序結果:即同乙個方法的呼叫,返回值不同。

比如,應用程式中有通過tcp/http鏈結外部網路操作,寫單元測試時,不希望應用程式真正鏈結外部網路(因為可能會鏈結失敗),因此需要對外部網路的tcp/http資料流返回資料進行mock。

下面直接用**,來描述如何mock.

1. mock:乙個類的所有例項

// 乙個類所有例項的某個方法,返回時序結果。

// 適用場景:每次呼叫,期望返回的資料不一樣。比如從tcp資料流中拿資料

//同一方法返回時序結果

public class returnsequenceresultinonemethodtest ;}};

anordinaryclass instance1 = new anordinaryclass();

assert.asserttrue(instance1.ordinarymethod() == 1);

assert.asserttrue(instance1.ordinarymethod() == 2);

assert.asserttrue(instance1.ordinarymethod() == 3);

assert.asserttrue(instance1.ordinarymethod() == 4);

assert.asserttrue(instance1.ordinarymethod() == 5);

// 因為在上面錄製指令碼中,只錄製了5個結果,當大於5時,就以最後一次結果為準

assert.asserttrue(instance1.ordinarymethod() == 5);

assert.asserttrue(instance1.ordinarymethod() == 5);

}

2. mock:僅僅是對某乙個例項的返回值進行錄製

// 與上述不一樣的地方,僅僅是對某乙個例項的返回值進行錄製

@test

public void testifmethodofintance() ;}};

// 只影響了instance這個例項

assert.asserttrue(instance.ordinarymethod() == 1);

assert.asserttrue(instance.ordinarymethod() == 2);

assert.asserttrue(instance.ordinarymethod() == 3);

assert.asserttrue(instance.ordinarymethod() == 4);

assert.asserttrue(instance.ordinarymethod() == 5);

// 因為在上面錄製指令碼中,只錄製了5個結果,當大於5時,就以最後一次結果為準

assert.asserttrue(instance.ordinarymethod() == 5);

assert.asserttrue(instance.ordinarymethod() == 5);

// 類anordinaryclass的其它例項並不會受到影響

anordinaryclass instance1 = new anordinaryclass();

// ordinarymethod這個方法本來就返回2

assert.asserttrue(instance1.ordinarymethod() == 2);

assert.asserttrue(instance1.ordinarymethod() == 2);

}

mock: tcp資料流返回資料
// 下面以對tcp資料流返回資料為例子,進行mock

@test

public void testinputstreamsequence() ;}};

// 讀取jmockit.cn伺服器返回的內容,如果沒有上面的mock,返回將是實際的內容

assert.asserttrue(in.read() == 1);

assert.asserttrue(in.read() == 2);

assert.asserttrue(in.read() == 3);

assert.asserttrue(in.read() == 4);

assert.asserttrue(in.read() == 5);

assert.asserttrue(in.read() == -1);

in.close();

} catch (exception e)

}

多執行緒執行同一方法問題

當多個執行緒啟動,訪問乙個例項中的乙個方法時,執 況如何,是等待乙個執行緒執行完成還是同時處理?資料又該如何處理?由五個部分組成,分別是 方法區,堆,棧,本地方法棧,程式計數器 堆 儲存所有引用資料的真實資訊 共享 棧 基本型別,資料運算,執行堆的指標等 私有 方法區 所有定義的方法等資訊 共享 程...

Delphi彙編級研究 一 方法呼叫

考慮如下這個簡單類ttest unit unit1 inte ce uses windows,sysutils,variants,classes type ttest class public j integer i integer function aa b,c integer integer s...

linux密碼破解一方法

鬱悶,剛裝的系統,好像任是把密碼輸錯兩遍了,所以進不去了,好在baidu一下,好多破解方法,這裡也記錄一下,以後就不怕再輸錯或者忘了 1.在出現grub畫面時,用上下鍵選中你平時啟動linux的那一項,然後按e鍵 2.再次用上下鍵選中你平時啟動linux的那一項 類似於kernel boot vml...