NSubstitute - When,Do 的應用
範例程式碼放在 GitHub
前言
page5 最後提到萬一是void 有用out 該如何處理呢 就是要用 When,Do
Returns的變化
直接看程式碼
public class Calculator
{
public virtual void Add(int a, int b, out int c, ref bool d)
{
c = a + b;
d = c > 0;
}
}
[TestMethod]
public void test1()
{
//arrange
var calculator = Substitute.For<Calculator>();
var c = 0;
var d = false;
calculator.When(x => x.Add(3,6, out c,ref d))
.Do(x =>
{
x[2] = 9;
x[3] = true;
});
var expectedOut = 9;
var expectedRef = true;
//act
calculator.Add(3, 6, out c, ref d);
//assert
Assert.AreEqual(expectedOut, c);
Assert.AreEqual(expectedRef, d);
}
重點是When
當(when)執行add後,去做(Do)
x[2] = 9;
x[3] = true;
這樣就可以去設定out ref 的參數值
再來一段程式碼
[TestMethod]
public void test2()
{
//arrange
var calculator = Substitute.For<Calculator>();
var c = 0;
var d = false;
var count = 0;
calculator.When(x => x.Add(3, 6, out c, ref d))
.Do(x => count++);
var expected = 3;
//act
calculator.Add(3, 6, out c, ref d);
calculator.Add(3, 6, out c, ref d);
calculator.Add(3, 6, out c, ref d);
//assert
Assert.AreEqual(expected, count);
}
解釋一下程式碼的意思
當(When)執行Add後,做(Do) count++
我執行三次add 所以count 就會是3
這樣也是When Do 可以作到的
結語
我常用的都介紹完了 還有一些不常用的就等到哪天用到再來補充囉
NSub說明書 就先這樣囉
參考文章
[C#.NET] 單元測試 - 如何使用 NSubstitute 測試 void 方法的 out / ref
如果內容有誤請多鞭策謝謝