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

时间:2011-03-02 14:30:25

标签: .net mocking

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

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

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

从我收集的内容来看,这些似乎是最受欢迎的。在我去那里尝试每一个之前,我想问你们大家的建议......

我在寻找:

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

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

谢谢。

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

2 个答案:

答案 0 :(得分:5)

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

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

mock.Setup(foo => foo.Name).Returns("bar")

简单设计

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

  1. 将模拟注入对象

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

    mockView.Raise(v => v.SomeEvent += null, EventArgs.Empty);
    mockModel.Verify(m => m.DoSomething());
    
  3. 精心制作反馈

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

      

    测试'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();