[NSub說明書] Page 5 - ref 或 out 的參數

NSubstitute - ref 或 out 的參數
範例程式碼放在 GitHub

前言

當用到ref 或 out 的參數時,要如何去設定呢?

Returns的變化

直接看程式碼

        public class Calculator
        {
            public virtual string Add(int a, int b, out int c, ref bool d)
            {
                c = a + b;
                d = c > 0;
                return c.ToString();
            }
        }

        [TestMethod]
        public void test1()
        {
            //arrange
            var calculator = Substitute.For<Calculator>();
            var c = 0;
            var d = false;
            calculator.Add(3, 6, out c, ref d).Returns(x =>
            {
                x[2] = 9;//注意第一個參數是x[0],所以是X[2]
                x[3] = true;
                return "9";
            });
            var expected = "9";
            var expectedOut = 9;
            var expectedRef = true;

            //act
            var actual = calculator.Add(3, 6, out c, ref d);

            //assert
            Assert.AreEqual(expected, actual);
            Assert.AreEqual(expectedOut, c);
            Assert.AreEqual(expectedRef, d);
        }

重點是Returns ( ReturnsForAnyArgs ) 可以去指定第幾個參數的回傳值
x[2] = 9;
x[3] = true;
return "9";

請注意 這邊是x[2] 是指第三個參數喔
最後return 就是方法的回傳值

這邊除了Set 之外 也是可以Get
​x[2] = (int)x[0]+ (int)x[1]
就是 x[2] = 3 + 6

結語

假設void 方法用 out 參數 這篇的範例 是不成功的
就要用when do 來解決
所以 接下來介紹 when do的應用

參考文章

[C#.NET] 單元測試 - 如何使用 NSubstitute 測試 void 方法的 out / ref

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