iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
0
Software Development

【Unit Test】Unit Test with C#系列 第 20

【Day 20】NSubstitue 2 -第一個測試

第一個範例,就拿官網的來做吧,比較簡單明瞭,又有品質保障XD


現在我們要製作一個簡易的計算機,所以我們有個簡單的Interface,裡面包含Add功能,可以「A+B」:

public interface ICalculator
{
    int Add(int a, int b);
    string Mode { get; set; }
    event EventHandler PoweringUp;
}

然後我們在Test Function內建置一個substitute,這是可以建置一個替代的物件,可以製作成stub, mock, fake, spy...這邊大幅的減少,實作出stub、mock的步驟。

calculator = Substitute.For<ICalculator>();

接著我們製作做出一個返回的值,當這個substitute被呼叫的時候,會返回一個值。然後加上收到和沒有收到值的調用。所以就是下面兩段程式碼的功能:

calculator.Add(1, 2).Returns(3);
Assert.That(calculator.Add(1, 2), Is.EqualTo(3));

calculator.Add(1, 2);
calculator.Received().Add(1, 2);
calculator.DidNotReceive().Add(5, 7);

所以當程式碼出問題的時候,就會顯示錯誤訊息(因為不是重點,這邊就沒有列出來,如果想要看可以去官網看)。

接著再加上「Mode」的虛擬對象,並且對其進行斷言(Assert):

calculator.Mode.Returns("DEC");
Assert.That(calculator.Mode, Is.EqualTo("DEC"));
 
calculator.Mode = "HEX";
Assert.That(calculator.Mode, Is.EqualTo("HEX"));

現在追加一個範例「多個參數」的設定方法,直接在Returns裡面用「,」做區隔。

calculator.Mode.Returns("HEX", "DEC", "BIN");
Assert.That(calculator.Mode, Is.EqualTo("HEX"));
Assert.That(calculator.Mode, Is.EqualTo("DEC"));
Assert.That(calculator.Mode, Is.EqualTo("BIN"));

我們在於一開始的interface有event EventHandler PoweringUp,(此處使用argument matching),我們在下面這段程式碼進行觸發此事件。

bool eventWasRaised = false;
calculator.PoweringUp += (sender, args) => eventWasRaised = true;
 
calculator.PoweringUp += Raise.Event();
Assert.That(eventWasRaised);

這樣就大致完成官方的基礎使用囉!


上一篇
【Day 19】隔離框架2-NSubstitute簡介
下一篇
【Day 21】NSubstitue 3 -第二個測試(待續)
系列文
【Unit Test】Unit Test with C#31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言