我的团队最近决定使用 Moq 作为我们的模拟框架,因为它具有极大的灵活性和高度可读的语法。由于我们是新手,所以我在看似简单的问题上绊倒了——搜索(这里,谷歌等)发现很多关于起订量其他细微差别的讨论,但不一定是我所追求的,并且几个看似相关的问题变成了红鲱鱼。
我们正在测试一个具有外部依赖项的类(准确地说是 Amazon SimpleDb),但不希望我们的测试绑定到实时连接。具体方法:
- 应用一些“业务”逻辑
- 如果合适,通过我们构建的提供程序调用 SDB,让我们调用它
SaveItem()
我想对此进行单元测试,以便我们设置所需的上下文并确保它SaveItem()
被调用,但是以一种SaveItem()
真正没有被调用的方式(因为 A)SDB 的提供者是一个没有完全水合的模拟,可能会爆炸B)我不想为那笔交易支付成百上千次)。
在处理返回值的方法时,这是微不足道的。
mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");
不过,在我上面概述的情况下,我的 " SaveItem()
" 方法是无效的,因此使用 MoqReturns()
方法的选项不可用。虽然我可以设置一个回调来验证是否SaveItem()
被调用,但我似乎无法让它实际上不做任何事情。
天真/充满希望,我认为以下方法会起作用,但它似乎仍然调用该方法:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));
所以百万美元的问题:以下虚构代码的起订量是多少?
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();