bak*_*san 30 c# methods unit-testing moq mocking
我的团队最近决定使用Moq作为我们的模拟框架,因为它具有极大的灵活性和高度可读的语法.由于我们刚接触它,我在看似简单的问题上磕磕绊绊 - 搜索(这里,谷歌等)找到了关于Moq其他细微差别的大量讨论,但不一定是我所追求的,以及一些看似相关的问题变成了红色的鲱鱼.
我们正在测试一个具有外部依赖关系的类(确切地说是Amazon SimpleDb)但不希望我们的测试绑定到实时连接.一种特殊的方法:
SaveItem()
我想对这进行单元测试,以便我们设置所需的上下文并确保SaveItem()
调用它,但是以一种SaveItem()
真正未被调用的方式(因为A)SDB的提供者是一个没有完全补充的模拟器,并且可能会炸弹和B)我不想为这笔交易付出数十万次).
在处理返回值的方法时,这很简单.
mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");
Run Code Online (Sandbox Code Playgroud)
在我概述的情况下,我的" SaveItem()
"方法是无效的,因此使用Moq Returns()
方法的选项不可用.虽然我可以设置一个回调来验证是否SaveItem()
被调用,但我似乎无法让它实际上没有做任何事情.
天真/充满希望,我认为以下内容可行,但似乎仍然会调用该方法:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));
Run Code Online (Sandbox Code Playgroud)
所以百万美元的问题:以下虚构代码的Moq是什么?
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();
Run Code Online (Sandbox Code Playgroud)
wom*_*omp 34
如果SaveItem()
方法是虚拟的或抽象的,并且您没有设置Callbase = true
,那么应该重新实现该方法以通过模拟执行任何操作.
你应该能够做到:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).Verifiable();
... test here ...
mockDb.Verify();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10856 次 |
最近记录: |