建立一個替代執行個體的基本文法:
這就是通常情況下你建立一個類型的替代執行個體的方法。一般來說,這個類型是一個接口,但是在一些特殊情況下,也可以對類進行替代。
警告:類的替代可能會有一些不太好的副作用。NSubstitute 隻能作用于類中的虛拟成員,是以類中的任何非虛成員代碼将都會被真實的執行。如果你嘗試替代一個類,而該類會在其構造函數或某個非虛屬性中格式化硬碟,那麼你就是自讨苦吃了。如果可能的話,請堅持隻替代接口類型。
在知道了我們不會替代類類型之後,此處描述如何為一個具有含參構造函數的類建立替代執行個體:
對于具有預設構造函數的類,建立其替代執行個體的文法與替代接口一樣。
有些時候,你可能需要為多個類型建立替代執行個體。一個最好的例子就是,當你有代碼使用了某類型後,需要檢查是否其實作了 IDisposable 接口,并且确認是否調用了 Dispose 進行類型銷毀。


通過這種方法,替代執行個體可以實作多個類型。但請記住,一個類最多隻能實作一個類。如果你願意的話,你可以指定多個接口,但是其中隻能有一個是類類型。為多個類型建立替代執行個體的最靈活的方式是使用重載。


通過使用 Substiute.For<T>() 文法,NSubstitute 可以為委托類型建立替代。當為委托類型建立替代時,将無法使該替代執行個體實作額外的接口或類。


<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_get_started.html">(一)入門基礎</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_creating_a_substitute.html">(二)建立替代執行個體</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_setting_a_return_value.html">(三)設定傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_return_for_specific_args.html">(四)為特定參數設定傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_return_for_any_args.html">(五)為任意參數設定傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_return_from_a_function.html">(六)使用函數設定傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_multiple_return_values.html">(七)設定多個傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_replacing_return_values.html">(八)替換傳回值</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_checking_received_calls.html">(九)檢查接收到的調用</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_clearing_received_calls.html">(十)清理已收到的調用</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_argument_matchers.html">(十一)參數比對器</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_callbacks_void_calls_and_when_do.html">(十二)使用回調函數和WhenDo文法</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_throwing_exceptions.html">(十三)抛出異常</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_raising_events.html">(十四)引發事件</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_auto_and_recursive_mocks.html">(十五)自動遞歸模拟</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_setting_out_and_ref_args.html">(十六)設定out和ref參數</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_actions_with_argument_matchers.html">(十七)參數比對器上的操作</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_checking_call_order.html">(十八)檢查調用順序</a>
本文轉自匠心十年部落格園部落格,原文連結:http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_creating_a_substitute.html,如需轉載請自行聯系原作者