我在AutoMoq中使用AutoFixture。我尝试创建一个类的伪实例,它有一个带有getter但没有setter的属性。我希望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“方法在这种情况下不起作用,因为auto fixture说数据没有任何setter,这就是为什么我必须在之后通过直接调用mock来设置值。
有没有办法让auto fixture自己做这件事,这样我就不需要最后一行代码了?
编辑:我犯了一个错误,代码示例不起作用。它应该是
var data = new List<Data>() { new Data() };
var userManager = fixture.CreateAnonymous<IRepository>();
Mock.Get(userManager).Setup(x => x.Data).Returns(data)尽管如此,如果对伪实例有一个with方法,那就更好了。
发布于 2013-03-13 14:55:49
AutoFixture.AutoMoq doesn't set up your Test Doubles为您服务。
如果您希望避免在每个测试用例中都为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);
}从理论上讲,可以编写自动代码来反映接口的成员并为每个成员设置返回值,但在AutoFixture.AutoMoq中,这永远不应该是默认行为。
https://stackoverflow.com/questions/15338823
复制相似问题