寻找.net的最佳开源模拟框架
我知道这是相当主观的,但我正在潜入测试和学习关于模拟的知识,并且我正在试图弄清楚我应该使用哪种框架。如果您能告诉我您推荐了哪些,最重要的是为什么它比您使用过的其他产品好,我会特别推荐。或者,如果有人知道我在哪里可以得到一个并列比较,这也会很有帮助。我喜欢Rhinomock,但它是我唯一使用过的:} 这看起来很有希望:寻找.net的最佳开源模拟框架,.net,mocking,.net,Mocking,我知道这是相当主观的,但我正在潜入测试和学习关于模拟的知识,并且我正在试图弄清楚我应该使用哪种框架。如果您能告诉我您推荐了哪些,最重要的是为什么它比您使用过的其他产品好,我会特别推荐。或者,如果有人知道我在哪里可以得到一个并列比较,这也会很有帮助。我喜欢Rhinomock,但它是我唯一使用过的:} 这看起来很有希望: 我也在使用Rhinomock。我特别喜欢AAA(arrangeact-Assert)模式。Rhinomock可以使用此模式轻松设置期望值并检查它们。语法使用lambdas和chai
我也在使用Rhinomock。我特别喜欢AAA(arrangeact-Assert)模式。Rhinomock可以使用此模式轻松设置期望值并检查它们。语法使用lambdas和chaining,这非常适合LINQ。语法上的相似性有助于理解,并使代码更加紧凑。我唯一的问题是,为了模拟一个方法,它需要是虚拟的,这并不是什么大问题。从某种意义上说,这是好的,因为它“强迫”您重构接口,但如果一个接口不是真正需要的,这可能是一件痛苦的事情。这会使模拟某些框架类变得更加困难。您可以通过将类方法标记为虚拟,或者使用框架类,创建一个您模拟的包装来解决这个问题。我不认为这些问题是Rhinomock独有的。是最先进的。它使用了.NET3.5和C#3.0的所有功能。这将是有趣的:
- 我用过NMock,觉得它很棒。
然而,这是我唯一用过的。我用过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
}
[测试]
公共void SomeOtherTest()
{
//安排
var mock=new mock();
var sut=newsystemundertest(mock.Object);//我从来都不喜欢这样做。。。
Setup(m=>x.Bar()).Returns(“一大堆仪式语法…”);
//表演
sut.DoSomething();
//断言
mock.Verify(m=>m.Baz());//baaaah,更多laaaaambdas
}
现在,我陶醉于非lambda性
[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();
}
[测试]
公共无效NSubTest()
{
var mock=replacement.For();
var sut=newsystemundertest(mock);//好多了!
mock.Bar()返回(“Look ma!No lambdas!”);
sut.DoSomething();
mock.Received().Baz();
}
最后一点是。。它在github上
你可能会发现理查德·班克斯的书很有用
注:为了充分披露,我是这本书的合著者,在比较中得到了相当好的结果。:) 你有什么特别喜欢/不喜欢的吗?对不起,不是你自己。。。这是很容易学习和开始。开发人员在开发社区中非常活跃,深受尊敬。+1!我用过NMock、Rhino mock和Moq。在我看来,Moq是迄今为止最好的方法。事实并非如此,Moq也有同样的“限制”,即所有内容都必须是抽象的、实现接口或具有虚拟成员。NMock的问题(至少是我使用它时的问题)是,您所有的方法名都是字符串。这意味着您在更改接口时不会得到任何编译器帮助。这也意味着重构工具无法成功地更改测试。如果更改界面和重构工具,RHNO和MOQ至少不会编译。公平评论-现在是时候看其他的了。对于那些仍然在运行的人来说,也可能要考虑这些框架中的哪一个具有自动锁定扩展。例如,AutoFac和AutoFixIt都具有MOQ支持。我相信这两个框架都支持其他一些模拟框架(Rhino、NSubstitute等)。在软件包管理器中花些时间,看看它们有多受欢迎,以及在做出选择时最近更新了多少。