iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Software Development

單元測試從入門到進階之路 (以 C# NUnit 3 X NSubstitute 為例)系列 第 15

Day 15-隔離框架 (isolation Framework) - 概念基本介紹 (核心技術-7)

何謂隔離框架 (isolation Framework)

今天走到了鐵人賽一半的賽點,終於要提到我們標題 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 的基本介紹。


上一篇
Day 14-假物件 (Fake) - 模擬物件 (Mock)-3 (核心技術-6)
下一篇
Day 16-隔離框架 (isolation Framework) - NSubstitute 基本介紹 (核心技術-8)
系列文
單元測試從入門到進階之路 (以 C# NUnit 3 X NSubstitute 為例)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言