C#模拟框架 - 简单,信息异常

Kem*_*eth 0 .net mocking

到目前为止,我一直在使用NUnit.Mocks来隔离我的课程,但是由于缺乏给我的反馈,我感到很恼火.所以我一直在寻找替代方案,但无处可去.

犀牛嘲笑:无法理解.一切都必须以完全不同的模糊方式完成,使测试代码几乎不可读.

Moq:无法弄清楚如何模拟属性getter.有样品,但我尝试时它们不起作用.

从我收集的内容来看,这些似乎是最受欢迎的.在我去尝试每一个之前,我想请大家提一下建议......

我在找什么:

  • 设计简单.我不想记住100个不同的陈述以及使用哪个陈述取决于我的方法是否具有返回值,我的属性是否同时具有吸气剂和设置者,或者只是其中之一,是否是满月等等...
  • 精心制作的反馈.如果我的测试失败,我想知道什么方法调用缺失或太多.我想知道哪个调用有错误的参数.等等...

我的背景是C#2.0.我仍然非常熟悉新版.NET中的概念.因此,不需要这些东西的框架将是一个奖励.

谢谢.

编辑:我终于弄清楚为什么我的Moq测试不起作用.它与Moq无关,我现在正在进一步评估它.到目前为止看起来非常好......

Pet*_*lly 5

我使用Moq并且我更喜欢实现而不是其他一些模拟框架的Replay方法 - 我发现它更自然.

你对物业有什么问题?要模拟从属性返回值,它就是

mock.Setup(foo => foo.Name).Returns("bar")
Run Code Online (Sandbox Code Playgroud)

简单的设计

Moq有一个流畅的界面,代码可以表现得非常漂亮.例如:

  1. 将模拟注入对象

    mockView = new Mock<IView>();
    mockModel = new Mock<IModel>();
    realPresenter = new Presenter(mockView.Object, mockModel.Object);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 测试Presenter对View事件作出反应的行为

    mockView.Raise(v => v.SomeEvent += null, EventArgs.Empty);
    mockModel.Verify(m => m.DoSomething());
    
    Run Code Online (Sandbox Code Playgroud)

精心反馈

我发现故障反馈非常有用,我通常可以很快找到问题.假设您希望调用具有特定参数值的方法并且它失败.

测试'MyProject.MyTest'失败:Moq.MockException:模拟上的预期调用至少一次,但从未执行过:v = >> v.DoSomething("Something") >未配置任何设置.

执行调用:Moq.Mock.ThrowVerifyException中的View.DoSomething("SomethingElse") (期望MethodCall,IEnumerable 1 setups, IEnumerable1 actualCalls,表达式表达式,Times次数,Int32 callCount)Moq.Mock.VerifyCalls(Interceptor targetInterceptor,MethodCall expected,Expression expression,时间)在Moq.Mock.Verify [T](模拟模拟,表达式1 expression, Times times, String failMessage) at Moq.Mock1.Verify(表达式`1表达式)MyTest.cs(118,0):

起订量快速入门是很好的放在一起,一直到目前为止,我所需要的唯一参考.