AutoFixture が凍結されたモックのプロパティを上書きしているように見えるという問題があります。モックされたクラスのプロパティは読み取り専用であり、私が読んだことから、AutoFixture はそれに対して何もしようとすべきではありません。
以下のLINQPadで問題を再現するためのコードを含めました。Victim
2 つの読み取り専用プロパティを持つ単純なテスト クラスです。問題は、Things
プロパティの期待値を設定Object
し、型を返す AutoFixture のインスタンスとしてモックを登録するVictim
と、コレクションThings
に異なる文字列が含まれることです。
問題を再現するには、LINQPad で以下のコードをC# プログラムとして実行し、NuGet からAutoFixtureとMoqを参照します。名前空間MoqとPloeh.AutoFixtureを必ず含めてください。
私の期待は、登録したオブジェクトを取得し、返されたのRegister
コレクションが への呼び出しで参照したコレクションを返すことです。Things
Victim
SetupGet
public class Victim
{
private string _vic;
private IEnumerable<string> _things;
public virtual string VictimName { get { return _vic; } }
public virtual IEnumerable<string> Things { get { return _things; } }
}
void Main()
{
var fixture = new Fixture();
var victimName = fixture.CreateAnonymous("VIC_");
var things = fixture.CreateMany<string>();
victimName.Dump("Generated vic name");
things.Dump("Generated things");
var victimMock = fixture.Freeze<Mock<Victim>>();
victimMock.SetupGet(x => x.VictimName).Returns(victimName).Verifiable();
victimMock.SetupGet(x => x.Things).Returns(things).Verifiable();
fixture.Register(() => victimMock.Object);
var victim = fixture.CreateAnonymous<Victim>();
(victim.Equals(victimMock.Object)).Dump("Victims are the same?");
victim.VictimName.Dump("Returned name");
victim.Things.Dump("Returned things");
(things.Equals(victim.Things)).Dump("Returned things are the same?");
victimMock.Verify();
}