如何解决AutoFixture with AutoMoq 总是在自定义后返回相同的实例
我有以下代码来设置来自模拟客户端的一些响应(为 brewity 省略了部分代码):
IFixture fixture = new Fixture().Customize(new automoqCustomization()
{ ConfigureMembers = true,GenerateDelegates = true });
CustomNetworkCall<ResponSEObject> GetNewResponse()
{
var response = fixture.Create<ResponSEObject>();
fixture.Customize<ResponSEObject>(ro => ro.FromFactory(() =>
{
response.DataList.AddRange(fixture.CreateMany<DataObject>(random.Next(3,10)));
return response;
})
.With(item => item.Id,Guid.NewGuid().ToString())
);
return fixture.Create<CustomNetworkCall<ResponSEObject>>();
}
//setup for mock code
clientMock.Setup(client =>
client.GetResponseAsync(
It.IsAny<IdDescription>(),It.IsAny<DataValidation>(),It.IsAny<DateTime?>(),It.IsAny<CancellationToken>()))
.Returns(GetNewResponse());
我使用模拟出的方法来获取一个新实例,但我总是使用相同的 ResponSEObject
获取第一个创建的 Id
实例:
try
{
//I always get the same instance!!!
responSEObject = await basicclient.GetResponseAsync(new(){Id = Guid.NewGuid()});
}
catch (Exception e)
{
Logger.LogError(e,e.Message);
}
不幸的是,documentation 在这个主题上“相当”空洞。
每次调用时我应该更改什么才能获得新实例?
解决方法
//...
.Returns(GetNewResponse());
将返回调用 GetNewResponse()
时提供的相同实例。
如果您希望每次调用都有不同的实例,请重构 .Returns
以调用委托
//...
.Returns(() => GetNewResponse()); //<-- note the function in .Returns
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。