到目前为止,我一直在使用NUnit.Mocks来隔离我的课程,但由于缺乏给我的反馈,我感到很恼火。所以我一直在四处寻找替代方案但无处可去。
犀牛嘲笑:无法理解。一切都必须以完全不同的模糊方式完成,使测试代码几乎不可读。
Moq :无法弄清楚如何模拟属性getter。有样品,但我尝试时它们不起作用。
从我收集的内容来看,这些似乎是最受欢迎的。在我去那里尝试每一个之前,我想问你们大家的建议......
我的背景是C#2.0。我仍然非常熟悉新版.NET中的概念。所以一个不需要这些东西的框架将是一个奖励。
谢谢。
编辑:我终于找到了为什么我的Moq测试不起作用。它与Moq无关,我现在正在进一步评估它。到目前为止看起来非常好......
答案 0 :(得分:5)
我使用Moq并且我更喜欢实现而不是其他一些模拟框架的Replay方法 - 我发现它更自然。
您对物业有什么问题?要模拟从属性返回值,它只是
mock.Setup(foo => foo.Name).Returns("bar")
简单设计
Moq有一个流畅的界面,代码可以表现得非常漂亮。例如:
将模拟注入对象
mockView = new Mock<IView>();
mockModel = new Mock<IModel>();
realPresenter = new Presenter(mockView.Object, mockModel.Object);
测试Presenter的行为 对View事件作出反应
mockView.Raise(v => v.SomeEvent += null, EventArgs.Empty);
mockModel.Verify(m => m.DoSomething());
精心制作反馈
我发现故障反馈非常有用,我通常可以很快找到问题。假设您希望调用具有特定参数值的方法并且它失败。
测试'MyProject.MyTest'失败: Moq.MockException: 模拟上的预期调用至少一次,但从未执行过:v =&GT; &GT;的 v.DoSomething( “东西”)强>&GT;没有配置设置。
执行调用: View.DoSomething(“SomethingElse”) 在 Moq.Mock.ThrowVerifyException(MethodCall 预期,IEnumerable
1 setups, IEnumerable
1 actualCalls,Expression 表达式,时间时间,Int32 callCount)at Moq.Mock.VerifyCalls(拦截 targetInterceptor,MethodCall 期待,表达表达,时代 时间)在Moq.Mock.Verify [T](模拟 mock,表达式1 expression, Times times, String failMessage) at Moq.Mock
1.验证(表达式`1 表达式)MyTest.cs(118,0):
Moq Quickstart很好地组合在一起,是迄今为止我唯一需要的参考。
答案 1 :(得分:2)
FakeItEasy的设计简单(可发现性),并且非常重要的是反馈作为两个主要的设计目标。
另一个主要设计目标是测试的可读性。
你说你不想记住100个不同的陈述?嗯,好的,FakeItEasy使用的只不过是你可以依靠你手上的手指。
例如,配置和断言是通过相同的语句完成的:
// Creating a fake
var foo = A.Fake<IFoo>();
// Configuration
A.CallTo(() => foo.Bar()).Returns("a value");
// Assertion
A.CallTo(() => foo.Bar()).MustHaveHappened();