6

AutoMoqでAutoFixtureを使用しています。ゲッターはあるがセッターはないプロパティを持つクラスの偽のインスタンスを作成しようとしています。AutoFixtureがモックを構成して、セッターがなくても指定された値を返すようにすることを期待しています。

私のコードはそのようなものです:

var data = new List<Data>() { new Data() };
var userManager = fixture.Build<IRepository>()
      //.With(x => x.Data, data)
        .CreateAnonymous();
Mock.Get(userManager).Setup(x => x.Data).Returns(data);

残念ながら、この場合、「With」メソッドは機能しません。これは、自動フィクスチャがデータにセッターがないと言っているため、後でモックを直接呼び出して値を設定する必要があるためです。

自動フィクスチャがそれ自体でこれを実行できる方法はありますか?コードの最後の行は必要ありませんか?

編集:私は間違いを犯しました、コード例は機能しません。そのはず

var data = new List<Data>() { new Data() };
var userManager = fixture.CreateAnonymous<IRepository>();
Mock.Get(userManager).Setup(x => x.Data).Returns(data)

それでも、偽のインスタンス用のwithメソッドがあればよいでしょう。

4

1 に答える 1

6

AutoFixture.AutoMoqは、テストダブルを設定しません

IRepository.Dataすべてのテストケースでセットアップを指定する必要がない場合は、セットアップをCustomizationにパッケージ化できます。

public class RepositoryCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Register(() =>
        {
            var td = new Mock<IRepository>();
            td.SetupGet(r => r.Data).Returns(fixture.CreateMany<Data>());
            return td.Object;
        });
    }
}

これで、次のテストに合格します。

[Fact]
public void AutoProperty()
{
    var fixture = new Fixture().Customize(new RepositoryCustomization());
    var repo = fixture.Create<IRepository>();
    Assert.NotEmpty(repo.Data);
}

理論的には、インターフェイスのメンバーを反映​​し、各メンバーの戻り値を設定する自動コードを作成することは可能ですが、IMOでは、これがAutoFixture.AutoMoqのデフォルトの動作になることはありません。

于 2013-03-13T06:55:48.850 に答える