作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的团队最近决定使用 Moq 作为我们的模拟框架,因为它具有极大的灵 active 和高度可读的语法。由于我们是新手,我遇到了看似简单的问题——搜索(此处,谷歌等)发现大量关于最小起订量其他细微差别的讨论,但不一定是我所追求的,并且几个看似相关的问题变成了转移注意力的问题。
我们正在测试一个具有外部依赖性(准确地说是 Amazon SimpleDb)的类,但不希望我们的测试绑定(bind)到实时连接。具体方法:
SaveItem()
我想对此进行单元测试,以便我们设置所需的上下文并确保 SaveItem()
被调用,但以 SaveItem()
确实未调用的方式' t 调用(因为 A)SDB 的提供者是一个没有完全水合的模拟,可能会爆炸,B)我不想为该交易支付成百上千次的费用)。
在处理返回值的方法时,这是微不足道的。
mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");
但在我上面概述的情况下,我的“SaveItem()
”方法无效,因此使用 Moq 的 Returns()
方法的选项不可用.虽然我可以设置一个回调来验证 SaveItem()
是否被调用,但我似乎无法让它实际上不做任何事情。
天真/满怀希望,我认为下面的方法会起作用,但它似乎仍在调用该方法:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));
那么百万美元的问题:以下虚构代码的最小起订量是多少?
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();
最佳答案
如果 SaveItem()
方法是虚拟的或抽象的,并且您没有设置 Callbase = true
,则应该重新实现该方法以不执行任何操作模拟。
你应该能够做到:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).Verifiable();
... test here ...
mockDb.Verify();
关于c# - "Short circuiting"最小起订量无效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1203529/
我是一名优秀的程序员,十分优秀!