[NSub說明書] Page 6 - When..Do

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

如果內容有誤請多鞭策謝謝