然後就可以建立乙個新的測試 fixture(可以選擇使用你最喜歡的ut測試框架,本文涉及的示例中我們使用mstest),開始思考從**入手。
首先,新增 using nsubstitute; 到當前的c#**檔案中,有了它我們就可以開始建立替身了。
現在,比如我們有乙個非常簡單的計算器介面:
1我們可以讓nsubstitute來建立型別例項的替代例項。可以建立諸如 stub、mock、fake、spy、test double 等,但當我們只是想要乙個能有一定程度控制的替代例項時,為什麼我們要困擾於此呢?public
inte***ce
icalculator25
event
eventhandler poweringup;
6 }
1現在,我們可以告訴被建立的替代例項,當方法被呼叫時返回乙個值:[testmethod]
2public
void
test_getstarted_getsubstitute()
3
1我們可以檢查該替代例項是否接收到了乙個指定的呼叫,或者未收到某指定呼叫:[testmethod]
2public
void
test_getstarted_returnspecifiedvalue()
3
1如果 received() 斷言失敗,nsubstitute 會嘗試給出有可能是什麼問題:[testmethod]
2public
void
test_getstarted_receivedspecificcall()
3
1[testmethod]
2 [expectedexception(typeof
(receivedcall***ception))]
3public
void
test_getstarted_didnotreceivedspecificcall()
4
expected to receive a call matching:我們也可以對屬性使用與方法類似的 retures() 語法,或者繼續使用簡單的屬性 setter 來設定返回值。add(
1, 2
)actually received no matching calls.
received
1 non-matching call (non-matching arguments indicated with '*'
characters):
add(*5*, *7*)
1nsubstitute 支援引數匹配功能,可以設定引數規則,並斷言判斷是否接收到引數匹配的呼叫。[testmethod]
2public
void
test_getstarted_setpropertyvalue()
3
1我們也可以在使用引數匹配功能的同時,傳遞乙個函式給 returns() ,以此來使替代例項具有更多的功能。[testmethod]
2public
void
test_getstarted_matcharguments()
3
1returns() 也可通過構造乙個返回值序列來指定多個引數。[testmethod]
2public
void
test_getstarted_passfunctoreturns()
3
1最後,我們可以在替代例項上引發事件通知:[testmethod]
2public
void
test_getstarted_multiplevalues()
3
1[testmethod]
2public
void
test_getstarted_raiseevents()3;
1112 calculator.poweringup +=raise.event();
1314
assert.istrue(eventwasraised);
15 }
NSubstitute完全手冊索引
nsubstitute 是乙個 net mocking 類庫。一直以來,開發者對 mocking 類庫的語法的簡潔性有強烈的渴望,nsubstitute 試圖滿足這一需求。簡單明瞭的語法可以讓我們將重心放在測試本身,而不是糾纏在測試替代例項的建立和配置上。nsubstitute 已嘗試將最常用的操作...
NSubstitute完全手冊索引
nsubstitute 是乙個 net mocking 類庫。一直以來,開發者對 mocking 類庫的語法的簡潔性有強烈的渴望,nsubstitute 試圖滿足這一需求。簡單明瞭的語法可以讓我們將重心放在測試本身,而不是糾纏在測試替代例項的建立和配置上。nsubstitute 已嘗試將最常用的操作...
NSubstitute完全手冊索引
nsubstitute 是乙個 net 單元測試模擬類庫。一直以來,開發者對 mocking 類庫的語法的簡潔性有強烈的需求,nsubstitute 試圖滿足這一需求。簡單明瞭的語法可以讓我們將重心放在測試本身,而不是糾纏在測試替代例項的建立和配置上。nsubstitute 已嘗試將最常用的操作需求...