【发布时间】:2013-03-12 12:03:19
【问题描述】:
如果您需要设置返回值,以及验证表达式被调用了多少次,您可以在一条语句中完成吗?
据我所知,Moq 的Setup(SomeExpression).Verifiable() 与Verify() 一起调用,基本上是Verify(SomeExpression, Times.AtLeastOnce)?即,它验证仅调用了表达式。
这里有一个例子可以更好地解释这个问题。对于接口:
interface IFoo
{
int ReturnSomething();
}
以下两个块是否等效(除了第一个将验证标记为可验证的所有设置)?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1).Verifiable();
mock.Verify();
}
和
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.AtLeastOnce());
}
如果我想验证调用次数(比如两次),这是唯一的方法吗,在设置和验证中重复表达式?
void Test()
{
var mock = new Mock<IFoo>();
mock.Setup((m) => m.ReturnSomething()).Returns(1);
mock.Verify((m) => m.ReturnSomething(), Times.Exactly(2));
}
我只是不喜欢调用设置和验证。好吧,既然这对 AAA 来说是个好主意,换个说法,我不喜欢重复设置和验证的表达式。目前我将表达式存储在一个变量中并将其传递给每个方法,但感觉不是那么干净。
PS - 上下文用于测试检查缓存何时更新(过期等)
【问题讨论】:
-
这是使用最小起订量 4(我看过旧代码 sn-ps,其中有 ISetup 上的方法,例如 AtMostOnce)
标签: testing mocking installation moq verify