gpt4 book ai didi

c# - 使用 ReturnsAsync 设置,需要返回传入的值但得到 null

转载 作者:行者123 更新时间:2023-11-28 20:38:09 24 4
gpt4 key购买 nike

我需要模拟我的 IVehicleRecordsRepository 进行一些测试。所以这是 repo 接口(interface):

public interface IVehicleRecordsRepository
{
Task<VehicleRecord> StoreAsync(VehicleRecord veh, Guid? userId = null);
//...
}

现在我尝试在 xUnit 测试中模拟它,因此 StoreMethod() 应该返回作为参数传入的相同值。下面是测试此场景的测试:

[Fact]
public async Task ShouldGetValueFromMockedMethod()
{
var mockRepo = new Mock<IVehicleRecordsRepository>();
mockRepo
.Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>(), Guid.NewGuid()))
.ReturnsAsync((VehicleRecord veh, Guid userId) => veh)
// tried this too -> .Returns((VehicleRecord veh, Guid userId) => Task.FromResult(veh))
;

VehicleRecord vr = new VehicleRecord(newVehicle, Guid.NewGuid());
var testVeh = await mockRepo.Object.StoreAsync(vr);
Assert.NotNull(testVeh); // ====> FAILS HERE
Assert.AreEqual(vr, testVeh);
}

那么,我怎样才能获得传递给 StoreAsync() 的相同值作为返回?

最小起订量版本:4.7.99.0

最佳答案

我没有用过Moq,所以请原谅我的无知。
在您的行为声明中:

var testVeh = await mockRepo.Object.StoreAsync(vr);

您只是传递车辆记录 ('vr'),但您的模拟对象设置为还需要 Guid.NewGuid(),对吗?

mockRepo.Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>(), Guid.NewGuid()))

会不会是它不符合预期,因此从不调用“(mockObject.)ReturnsAsync”方法?

你有没有试过做这样的事情:

var guid = Guid.NewGuid;
VehicleRecord vr = new VehicleRecord(newVehicle, guid);
var testVeh = await mockRepo.Object.StoreAsync(vr, guid);

或者,也许稍微简化一下,将您的 mockObject 更改为不期望 Guid,因为您只传递 VehicleRecord:

mockRepo.Setup(repo => repo.StoreAsync(It.IsAny<VehicleRecord>()))

关于c# - 使用 ReturnsAsync 设置,需要返回传入的值但得到 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45950228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com