在MOQ中,It用于添加参数约定,它有以下几个方法:
Is<T>:匹配确定的给定类型
IsAny<T>:匹配给定的任何值
IsInRange<T>:匹配给定类型的范围
IsRegex<T>:正则匹配
还是以上文中的例子:
public abstract class CounterBase { public abstract int CountArgs(int a, int b); }
测试代码:
Mock<CounterBase> mock = new Mock<CounterBase>(); mock.Setup(arg => arg.CountArgs(It.IsAny<int>(), It.IsAny<int>())).Returns(3); Assert.AreEqual(3, mock.Object.CountArgs(1, 2)); Assert.AreEqual(3, mock.Object.CountArgs(4, 6));
我们可以看到,这段代码完成的意思是,对于任何输入,输出都是3。
再看下面这段代码:
Mock<CounterBase> mock = new Mock<CounterBase>(); mock.Setup(arg => arg.CountArgs(It.IsAny<int>(), It.Is<int>((i) => i < 100))).Returns(3); Assert.AreEqual(3, mock.Object.CountArgs(1, 2)); Assert.AreEqual(0, mock.Object.CountArgs(4, 612));
这表示,对于第二个参数如果小于2,则输出3,否则默认输出(即int的默认值0);
其它两则类似,不再举例。