.net向けの最高のオープンソースモッキングフレームワークを探しています
質問
これはかなり主観的であることは知っていますが、私はテストに飛び込み、モックについて学び、どのフレームワークを使用すべきかを考えています。お勧めのものを教えてください。最も重要なことは、使用した他のものよりも優れている理由を教えてください。または、誰かが私がどこで役立つのかを並べて比較することができる場所を知っているなら。
解決
Moq は最も高度です。 .NET 3.5およびC#3.0のすべての機能を使用します。これは面白いでしょう:
他のヒント
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
}
今、私は非ラムダ赤さを楽しんでいます
[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に...
RhinoMocksは好きですが、使用したのはこれだけです:}
これは有望に見えます: http://code.google.com/p/mocking-frameworks-compare/
RhinoMocksも使用しています。私は特にAAA(Arrange-Act-Assert)パターンが好きです。 RhinoMocksを使用すると、このパターンを使用して簡単に期待値を設定し、チェックすることができます。構文はラムダとチェーンを使用します。これはLINQに非常によく適合します。構文の類似性は理解に役立ち、コードをよりコンパクトにすることができます。私がそれに関して抱えている唯一の問題は、それほど大きくはありませんが、メソッドをモックするには仮想である必要があるということです。ある意味では、これは「強制」するので良いです。インターフェイスにリファクタリングする必要がありますが、インターフェイスが実際に必要でない場合は苦痛になる可能性があります。一部のフレームワーククラスのモック作成がより困難になる可能性があります。これを回避するには、クラスメソッドを仮想としてマークするか、フレームワーククラスを使用して、代わりにモックするラッパーを作成します。これらの問題はRhinoMocksに固有のものではないと思います。
リチャードバンクスの一連のモックフレームワークを比較する投稿便利。
注:完全な開示のために、私は NSubstituteの共著者ですは比較でかなり好意的に出ています。 :)
NMockを使用しましたが、優れていると思います。 http://www.nmock.org/
ただし、これは私が使用した唯一のものです。