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
パラメーターを持つメソッドチートシートの下部に詳細があります。
迅速な対応ありがとうございます! IDependant
のプロパティの代わりにメソッドを使用してAutoConfiguredMoqCustomization
を試しましたが、フリーズしたインスタンスが尊重されました。 設定不可能なプロパティも尊重されるようにする方法はありますか? Moqを使用すると、セッターがない場合でもプロパティゲッターを設定できます。
実際、気にしないでください。 get-onlyプロパティも設定しますが、残念です。
また、AutoMoqに干渉し、get-onlyプロパティを設定できなくなったMoqのバグも覚えています。 少なくとも私がこれを調べたときは、Moqバージョン4.2.1409.1722以下を使用する必要がありました(詳細は#434)。 たぶん、バグは新しいバージョンのMoqで修正されているのかもしれませんが、よくわかりません。
4.2.1409.1722よりも低い最高のMoqバージョンを試しましたが、正解です。get-onlyプロパティでも機能します。 Moqのバグは、最新のもので試したため、新しいバージョンでは修正されませんでした。 手伝ってくれてありがとうございます
最も参考になるコメント
AutoMoqCustomization
はモックオブジェクトを作成しますが、それらを設定しません。モックのメンバーを設定する場合は、代わりに
AutoConfiguredMoqCustomization
使用を検討してください。 a)モックのパブリック設定可能プロパティを設定し、b)フィクスチャによって遅延生成された値を返す(そしてメモ化する)ためのメソッド/インデクサを設定します2つの制限があります。 セットアップされません:
ref
パラメーターを持つメソッドチートシートの下部に詳細があります。