Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
寻找.net的最佳开源模拟框架_.net_Mocking - Fatal编程技术网

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

寻找.net的最佳开源模拟框架,.net,mocking,.net,Mocking,我知道这是相当主观的,但我正在潜入测试和学习关于模拟的知识,并且我正在试图弄清楚我应该使用哪种框架。如果您能告诉我您推荐了哪些,最重要的是为什么它比您使用过的其他产品好,我会特别推荐。或者,如果有人知道我在哪里可以得到一个并列比较,这也会很有帮助。我喜欢Rhinomock,但它是我唯一使用过的:} 这看起来很有希望: 我也在使用Rhinomock。我特别喜欢AAA(arrangeact-Assert)模式。Rhinomock可以使用此模式轻松设置期望值并检查它们。语法使用lambdas和chai

我知道这是相当主观的,但我正在潜入测试和学习关于模拟的知识,并且我正在试图弄清楚我应该使用哪种框架。如果您能告诉我您推荐了哪些,最重要的是为什么它比您使用过的其他产品好,我会特别推荐。或者,如果有人知道我在哪里可以得到一个并列比较,这也会很有帮助。

我喜欢Rhinomock,但它是我唯一使用过的:}

这看起来很有希望:
我也在使用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等)。在软件包管理器中花些时间,看看它们有多受欢迎,以及在做出选择时最近更新了多少。