Autofixture: 質問:AutoMoqCustomizationを使用してネストされた依存関係モックをセットアップする

作成日 2016年04月15日  ·  5コメント  ·  ソース: AutoFixture/AutoFixture

AutoMoqCustomizationを使用して、ネストされた依存関係を持つオブジェクトグラフを自動モックしようとしましたが、結果が期待どおりではありません。 これがテストコードです。 Mock<IObject>フリーズした後、Moqによって作成された別のIObjectがフィクスチャによって作成される状況がある理由を誰かに教えてもらえますか?

[TestClass]
    public class MyTestClass
    {
        [TestMethod]
        public void Test()
        {
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var objMock = fixture.Freeze<Mock<IObject>>();
            var sut = fixture.Create<Dependant2>();

            sut.Obj.Should().BeSameAs(objMock);
        }
    }

    public interface IObject { }

    public interface IDependant { IObject Obj { get; } }

    public class MyObject : IObject { }

    public class Dependant2
    {
        public Dependant2(IDependant dependant)
        {
            Obj = dependant.Obj;
        }

        public IObject Obj { get; }
    }

最も参考になるコメント

AutoMoqCustomizationはモックオブジェクトを作成しますが、それらを設定しません。

モックのメンバーを設定する場合は、代わりにAutoConfiguredMoqCustomization使用を検討してください。 a)モックのパブリック設定可能プロパティを設定し、b)フィクスチャによって遅延生成された値を返す(そしてメモ化する)ためのメソッド/インデクサを設定します

2つの制限があります。 セットアップされません:

  • refパラメーターを持つメソッド
  • 一般的なメソッド

チートシートの下部に詳細があります。

全てのコメント5件

AutoMoqCustomizationはモックオブジェクトを作成しますが、それらを設定しません。

モックのメンバーを設定する場合は、代わりにAutoConfiguredMoqCustomization使用を検討してください。 a)モックのパブリック設定可能プロパティを設定し、b)フィクスチャによって遅延生成された値を返す(そしてメモ化する)ためのメソッド/インデクサを設定します

2つの制限があります。 セットアップされません:

  • refパラメーターを持つメソッド
  • 一般的なメソッド

チートシートの下部に詳細があります。

迅速な対応ありがとうございます! IDependantのプロパティの代わりにメソッドを使用してAutoConfiguredMoqCustomizationを試しましたが、フリーズしたインスタンスが尊重されました。 設定不可能なプロパティも尊重されるようにする方法はありますか? Moqを使用すると、セッターがない場合でもプロパティゲッターを設定できます。

実際、気にしないでください。 get-onlyプロパティも設定しますが、残念です。

また、AutoMoqに干渉し、get-onlyプロパティを設定できなくなったMoqのバグも覚えています。 少なくとも私がこれを調べたときは、Moqバージョン4.2.1409.1722以下を使用する必要がありました(詳細は#434)。 たぶん、バグは新しいバージョンのMoqで修正されているのかもしれませんが、よくわかりません。

4.2.1409.1722よりも低い最高のMoqバージョンを試しましたが、正解です。get-onlyプロパティでも機能します。 Moqのバグは、最新のもので試したため、新しいバージョンでは修正されませんでした。 手伝ってくれてありがとうございます

このページは役に立ちましたか?
0 / 5 - 0 評価