有時候,我們需要對同一方法呼叫時,返回結果為乙個時序結果:即同乙個方法的呼叫,返回值不同。
比如,應用程式中有通過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...