12

私はmoqを使い始めましたが、私の理解から、実際にそれらを気にしなくても、呼び出すことができるすべてのメソッドを常にモックアップする必要があります。

やりたいことを忘れてしまうようなものをモックアップするのに時間がかかることがあります。だから私は自動モッキングを見ていましたが、何を使うべきかわかりません。

自動モッキングコンテナとしてのAutoFixture

オートモッキング

最初のものの使い方がまったくわかりません。私は2番目のものを手に入れましたが、実際に試したことはありません。

どちらかがもう一方より優れているかどうかはわかりません。私が知っている唯一のことは、最初のものの依存関係であるAutoFixturesをすでに使用しているということです。

したがって、長期的には最初のものを使用するのは理にかなっていますが、私が言ったように、それを使用する方法に関する基本的なチュートリアルは見つかりません。

編集

「NikosBaxevanis」の例に従おうとしていますが、エラーが発生しています。

Failure: System.ArgumentException : A matching constructor for the given arguments was not found on the mocked type.
  ----> System.MissingMethodException : Constructor on type 'DatabaseProxyded46c36c8524889972231ef23659a72' not found.


var fixture = new Fixture().Customize(new AutoMoqCustomization());
        var fooMock = fixture.Freeze<Mock<IFoo>>();
       // fooMock.Setup(x => x.GetAccounts(It.IsAny<IUnitOfWork>()));
        var sut = fixture.CreateAnonymous<AdminService>();

        sut.Apply();
        fooMock.VerifyAll();

私のpetapocounitOfWorkプロパティのせいだと思います

PetaPoco.Database Db { get; }

どういうわけかこれをモックアップしたのかどうかわからない。

4

1 に答える 1

25

私はこれまで使用したことがありませんが、 AutoFixtureを自動モッキングコンテナとしてmoq-contrib Automocking使用するための情報を提供できる可能性があります。

現在、Moq、Rhino Mocks、FakeItEasy、およびNSubstituteがサポートされています。適切な拡張機能AutoMoqAutoRhinoMocksAutoFakeItEasy、およびAutoNSubstituteをインストールするだけです。

自動モックの拡張機能の1つをインストールすると、追加の呼び出しは次のようになります。

var fixture = new Fixture()
    .Customize(new AutoMoqCustomization());

(またはRhino Mocksを使用している場合)

var fixture = new Fixture()
     .Customize(new AutoRhinoMockCustomization());

(またはFakeItEasyを使用している場合)

var fixture = new Fixture()
     .Customize(new AutoFakeItEasyCustomization());

(またはNSubstituteを使用している場合)

var fixture = new Fixture()
     .Customize(new AutoNSubstituteCustomization());

例1

public class MyController : IController
{
    public MyController(IFoo foo)
    {
    }
}

public interface IFoo
{
}

AutoFixtureを使用してMyControllerクラスのインスタンスを作成する方法は次のとおりです。

var fixture = new Fixture()
    .Customize(new AutoMoqCustomization());

var sut = fixture.CreateAnonymous<MyController>();

ここで、sut変数を調べると、IFooがモックされたインスタンス(Castle.Proxies.IFooProxyに似たタイプ名を持つ)であることがわかります。

例2

この例は、前の例を拡張したものです。

AutoFixtureに、事前に構成された独自のモックされたインスタンスを使用するように指示できます。

var fooMock = fixture.Freeze<Mock<IFoo>>();
// At this point you may setup expectation(s) on the fooMock.

var sut = fixture.CreateAnonymous<MyController>();
// This instance now uses the already created fooMock.
// Verify any expectation(s).

基本的にはそれだけですが、さらに先に進むことができます。

以下は、xUnit.net拡張機能を使用してAutoFixtureを退屈に使用した前の例です。

例1

[Theory, AutoMoqData]
public void TestMethod(MyController sut)
{
    // Start using the sut instance directly.
}

例2

[Theory, AutoMoqData]
public void TestMethod([Frozen]Mock<IFoo> fooMock, MyController sut)
{
   // At this point you may setup expectation(s) on the fooMock.
   // The sut instance now uses the already created fooMock.
   // Verify any expectation(s).
}

AutoFixture、xUnit.net、およびAuto Mockingに関連するすべてへのリンクを含むこのブログ投稿で、より多くの情報を見つけることができます。

お役に立てば幸いです。

于 2012-10-13T07:42:38.677 に答える