今天走到了鐵人賽一半的賽點,終於要提到我們標題 NSubstitute 相關概念的介紹了XD。好,那先提單元測試的藝術是如何定義隔離框架:
隔離框架(isolation framework):是一套可用來幫助寫程式的 API,使用這套 API 來建立假物件,比手刻假物件要容易得多、快得多、簡潔許多。
所以隔離框架的目的就是要幫助我們撰寫假物件;此外,隔離框架也是能在執行期間建立和設定假物件的類別庫,而這些物件也被稱為動態虛設常式物件(dynamic stub)和動態模擬物件(dynamic mock)。
我們先透過程式碼來看一個例子(來源於單元測試的藝術),假設今天有一個介面長這樣:
public interface IComplicatedInterface
{
void Method1(string a, string b, bool c, int x, int y)
void Method2(string b, bool c, int x, int y)
void Method3(bool c, int x, int y)
}
從這個介面可以看出有三個方法,三個方法的參數個數加起來總共十二個;因此,我們可以寫出以下的假物件類別:
public class MytestableComplicatedClass : IComplicatedInterface
{
public string meth1_a;
public string meth1_b;
public bool meth1_c;
public int meth1_x;
public int meth1_y;
public string meth2_b;
public bool meth2_c;
public int meth2_x;
public int meth2_y;
public bool meth3_c;
public int meth3_x;
public int meth3_y;
public void Method1(string a, string b, bool c, int x, int y)
{
meth1_a = a;
meth1_b = b;
meth1_c = c;
meth1_x = x;
meth1_y = y;
}
public void Method2(string b, bool c, int x, int y)
{
meth2_b = b;
meth2_c = c;
meth2_x = x;
meth2_y = y;
}
public void Method3(bool c, int x, int y)
{
meth3_c = c;
meth3_x = x;
meth3_y = y;
}
}
是不是覺得很長,而且這還沒牽涉撰寫商業邏輯的程式碼在其中,若導入隔離框架,則可以自動化處理上述的手刻流程,那明天會介紹如何在專案上安裝 NSubstitute,並說明 NSubstitute 的基本介紹。