上一章我们将讲了伪造属性和事件
这一章我们将参数匹配,回调,和验证
It:参数匹配
It 这个类其实我们已经在前面有所涉及。我们使用It.IsAny<string>()匹配任意字符串。
fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>())).Returns((string value)=>value+"makes me slim");其实It 的功能非常强大,而且简单易用。直接看API名称就能了解。
这里就简单列出,不载赘述。
It.IsAny<T>,匹配指定类型参数It.IsNotNull<T>,匹配指定类型参数,Null除外It.Is<T>(Predicate),匹配指定类型参数,满足Predicate的条件It.IsInRange<T>(T from, T to, Range rangeKind),匹配指定类型参数,满足一定的from到to的范围。其中
Range.Inclusive代表参数在[from,to]之内满足其中
Range.Exclusive代表参数在(from,to)之内满足It.IsIn<T>(IEnumerable<T> items),匹配指定类型参数,在序列内It.IsIn<T>(params T[] items),匹配指定类型参数,在序列内It.IsNotIn<T>(IEnumerable<T> items),匹配指定类型参数,在序列外It.IsNotIn<T>(params T[] items),匹配指定类型参数,在序列外It.IsRegex(string regex),字符串正则匹配It.IsRegex(string regex, RegexOptions options),字符串正则匹配
CallBack:回调
CallBack是指在执行一个Setup的伪造方法时,执行一个回调函数
他的无参数结构是
//无参数
fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>()))
.Returns(true)
.Callback(() => call++);他的带参数结构有两种
//普通参数格式
fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>()))
.Returns(true)
.Callback((string s) => callArgs.Add(s));
//泛型参数格式
fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>()))
.Returns(true)
.Callback<string>(s => callArgs.Add(s));当然你还可以选择回调时机
//回调时机
fakeFoo.Setup(fake => fake.DoSomething(It.IsAny<string>()))
.Callback(() => Console.WriteLine("Before returns"))
.Returns(true)
.Callback(() => Console.WriteLine("After returns"));Verification:验证
验证是Assert环节行为,此时的伪对象作用是Mock
这里也只列出基本功能
Verify(expression),验证表达式是否被执行Verify(expression,times),验证表达式的执行次数其中
Times结构体构造可以参见官方文档VerifyGet<T>(expression),验证属性Get是否被执行VerifyGet<T>(expression,times),验证属性Get的执行次数VerifySet<T>(expression),验证属性Set是否被执行VerifySet<T>(expression,times),验证属性Set的执行次数VerifyNoOtherCalls(),处理已经验证的调用外,fake对象没有其他调用