我读过(并重新阅读)Martin Fowler的Mocks Are not Stubs.在其中,他定义了两种不同的TDD方法:"古典"和"模仿者".他试图回答" 我应该成为一个古典主义者还是一个嘲笑者? "这个问题,但他承认他从来没有尝试过模仿者TDD,而不仅仅是"玩具".所以我想我会问这个问题.好的答案可能会重复福勒的论点(但希望更清楚)或添加他没有想到的论点,或者其他人提出的论点,因为福勒上次在2007年1月更新了这篇论文.
我刚刚阅读了有关模拟对象的维基百科文章,但我仍然不完全清楚它们的用途.当实际对象过于复杂或不可预测时,它们似乎是由测试框架创建的对象(您知道100%确定模拟对象的值是什么,因为您完全控制它们).
但是,我的印象是所有测试都是使用已知值的对象完成的,所以我必须遗漏一些东西.例如,在课程项目中,我们负责日历应用程序.我们的测试套件由事件对象组成,我们确切知道它们是什么,因此我们可以测试多个事件对象,各种子系统和用户界面之间的交互.我猜这些是模拟对象,但我不知道你为什么不这样做,因为没有已知值的对象,你无法测试系统.
我们目前正在使用Autofac作为IoC容器来关注DI模型.
我们最近开始研究像MOQ和Rhino Mocks这样的模拟框架.但是,我们似乎无法证明它们仅用于为每个接口创建Mock实现类.
为什么这样:
var mock = new Mock<IFoo>();
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
Run Code Online (Sandbox Code Playgroud)
而不是这个:
class FooMock : IFoo {
bool DoSomething(string input) {
return input == "ping";
}
}
mock = new FooMock();
Run Code Online (Sandbox Code Playgroud)
后者更冗长,但似乎更灵活,适合复杂的嘲笑.
我一直在考虑学习存根和模拟,我知道.Net的几个可用库:RhinoMocks,Moq,TypeMock ......虽然我仍然没有太清楚存根和模拟之间的区别,我知道它就在那里,我总是可以谷歌一下.
我想知道,没有进入TDD或类似的东西:
学习曲线值得吗?我不太清楚在这种情况下学习所有关于期望或其他任何回报的细节.
生产收益是否比手工制作"虚拟实施"更大?我想是的,因为动态地模拟/存根一个类更快.
你会推荐哪个图书馆?Moq似乎更容易.
哪些是傻瓜的最佳资源(教程,书籍,视频...),或多或少是最新的?我不想了解一个库,当我下载最后一个版本时,意识到显示的大多数API不再有效.
谢谢你的一切.
mocking ×4
.net ×2
c# ×1
glossary ×1
moq ×1
rhino-mocks ×1
stubbing ×1
tdd ×1
testing ×1
unit-testing ×1