リポジトリサービスを利用するサービスクラスをテストしようとしています。リポジトリサービスで機能すると思われるカスタマイズを設定しましたが、代わりにデフォルトの匿名の結果を返します。以下のコードサンプルを見ると、svc.GetFoosメソッドを呼び出したときに、カスタマイズクラスに登録した「Foo」オブジェクトを取り戻そうとしていますが、何も得られません。
void Main()
{
var fixture = new Fixture().Customize(
new CompositeCustomization(
new Customization(),
new AutoMoqCustomization()));
var svc = fixture.CreateAnonymous<Bar>();
Console.Write(svc.GetFoos().Count());
}
// Define other methods and classes here
public class Bar
{
public IQueryable<Foo> GetFoos()
{
return _rep.Query<Foo>();
}
public Bar(IRepository rep) { _rep = rep; }
private IRepository _rep;
}
public class Foo
{
public string Name {get;set;}
}
public class Customization : ICustomization
{
public void Customize(IFixture fixture)
{
var f = fixture
.Build<Foo>()
.With(x => x.Name, "FromCustomize")
.CreateMany(2)
.AsQueryable();
fixture.Register<IQueryable<Foo>>(() => f);
}
}
public interface IRepository
{
IQueryable<T> Query<T>();
}
フィクスチャのインスタンス化後に次のコードをMainメソッドに追加すると、希望どおりに機能しますが、手動でモックを設定しているため、AutoFixtureAutoMoqが何を取得しているかわかりません。
var mock = fixture.Freeze<Mock<IRepository>>();
mock
.Setup(x => x.Query<Foo>())
.Returns(fixture.CreateAnonymous<IQueryable<Foo>>);
ありがとう。