寻找.net的最佳开源模拟框架

时间:2009-04-30 15:55:12

标签: .net mocking

我知道这是相当主观的,但我正在深入测试和学习嘲笑,我正在试图找出我应该使用哪个框架。如果你能告诉我你推荐哪些,最重要的是为什么它比你用过的其他人更好我会说的。或者,如果有人知道我可以在哪里进行并排比较,那也是有帮助的。

6 个答案:

答案 0 :(得分:7)

Moq是最先进的。它使用.NET 3.5和C#3.0的所有功能。这很有趣:

答案 1 :(得分:7)

我使用过Rhino.Mocks,Moq& NMock。我以前更喜欢Moq。

我现在使用NSubstitute ...并且发现它的语法远远优于moq的语法,并且你不会通过权力牺牲任何东西。

我曾经写过这样的测试:

[Test]
public void SomeOtherTest()
{
    //Arrange
    var mock = new Mock<IFoo>();
    var sut = new SystemUnderTest(mock.Object); //never liked doing it this way...
    mock.Setup(m => x.Bar()).Returns("A whole bunch of ceremonial syntax..");
    //Act
    sut.DoSomething();
    //Assert
    mock.Verify(m => m.Baz()); //Baaaaah, more laaaaambdas
}

现在我陶醉于非lambda-eryness

[Test]
public void NSubTest()
{
    var mock = Substitute.For<IFoo>();
    var sut = new SystemUnderTest(mock); //much nicer!
    mock.Bar().Returns("Look ma! No lambdas!");

    sut.DoSomething();

    mock.Received().Baz();
}

最后一点......它在github上......

http://nsubstitute.github.com/

答案 2 :(得分:3)

我喜欢RhinoMocks,但它是我用过的唯一一个:}

这看起来很有希望: http://code.google.com/p/mocking-frameworks-compare/

答案 3 :(得分:3)

我也在使用RhinoMocks。我特别喜欢AAA(Arrange-Act-Assert)模式。 RhinoMocks可以轻松设置期望并使用此模式检查它们。语法使用lambdas和chaining,它非常适合LINQ。语法的相似性有助于理解并允许代码更紧凑。我遇到的唯一问题,并不是很大,是为了模拟一个需要虚拟的方法。从某种意义上说这很好,因为它“强迫”你重构接口,但如果不真正需要接口,那就太痛苦了。它可以使一些框架类的模拟更加困难。您可以通过将类方法标记为虚拟来解决此问题,或者使用框架类创建一个您模拟的包装器。我不认为这些问题是RhinoMocks特有的。

答案 4 :(得分:1)

你可能会发现理查德班克斯的series of posts comparing mocking frameworks很有用。

注意:为了完全披露,我是NSubstitute的合着者,在比较中非常有利。 :)

答案 5 :(得分:0)

我使用了NMock并认为它很棒。 http://www.nmock.org/

但是 - 这是我用过的唯一一个。