下面的示例中将涉及替代下面的接口定义:
1 public interface ICalculator 2 { 3 int Add(int a, int b); 4 string Mode { get; set; } 5 }
为方法设置返回值
要为替代实例上的一个方法调用设置返回值,可以按正常调用该方法,然后紧跟着一个 NSubstitute 的 Returns() 扩展方法。
1 [TestMethod] 2 public void Test_SettingReturnValue_ReturnsValueWithSpecifiedArguments() 3 { 4 var calculator = Substitute.For<ICalculator>(); 5 calculator.Add(1, 2).Returns(3); 6 Assert.AreEqual(calculator.Add(1, 2), 3); 7 }
该方法在每次被调用时都会返回这个值。Returns() 仅会被应用于指定的参数组合,任何使用其他参数组合对该方法的调用将会返回一个默认值。
1 [TestMethod] 2 public void Test_SettingReturnValue_ReturnsDefaultValueWithDifferentArguments() 3 { 4 var calculator = Substitute.For<ICalculator>(); 5 6 // 设置调用返回值为3 7 calculator.Add(1, 2).Returns(3); 8 9 Assert.AreEqual(calculator.Add(1, 2), 3); 10 Assert.AreEqual(calculator.Add(1, 2), 3); 11 12 // 当使用不同参数调用时,返回值不是3 13 Assert.AreNotEqual(calculator.Add(3, 6), 3); 14 }
为属性设置返回值
为属性设置返回值的方式与为方法设置是一样的,仍然使用 Returns() 语法。对于可读写属性,可以使用传统的属性 setter 进行设置,当然结果就像你期待的那样。
1 [TestMethod] 2 public void Test_SettingReturnValue_ReturnsValueFromProperty() 3 { 4 var calculator = Substitute.For<ICalculator>(); 5 6 calculator.Mode.Returns("DEC"); 7 Assert.AreEqual(calculator.Mode, "DEC"); 8 9 calculator.Mode = "HEX"; 10 Assert.AreEqual(calculator.Mode, "HEX"); 11 }
更多的设置返回值的方式
本篇介绍了设置返回值的基本方式,但 NSubstitute 提供更多的功能。如果想了解其他方式,例如匹配具体参数、忽略参数、使用函数计算返回值、返回多个值等,请继续阅读。
NSubstitute 完全手册
- (一)入门基础
- (二)创建替代实例
- (三)设置返回值
- (四)为特定参数设置返回值
- (五)为任意参数设置返回值
- (六)使用函数设置返回值
- (七)设置多个返回值
- (八)替换返回值
- (九)检查接收到的调用
- (十)清理已收到的调用
- (十一)参数匹配器
- (十二)使用回调函数和WhenDo语法
- (十三)抛出异常
- (十四)引发事件
- (十五)自动递归模拟
- (十六)设置out和ref参数
- (十七)参数匹配器上的操作
- (十八)检查调用顺序
本文转自匠心十年博客园博客,原文链接:http://www.cnblogs.com/gaochundong/archive/2013/05/21/nsubstitute_setting_a_return_value.html,如需转载请自行联系原作者