如何为最小起订量设置提供正确的 CancellationToken?

问题描述 投票:0回答:0

在我的 MVVM 模型中,我调用了一个存储库方法:

public async Task LoadDistricts() 
{
    var districtsJson = await itemRepository.GetDistricts();
}

存储库使用 Polly 策略重试某些异常。

public async Task<List<DistrictJson>> GetDistricts()
{
    var districtsJson = await ExecutePolicyServiceCall(async () =>
    {
        return await policy.ExecuteAsync(async (cancelToken) =>
        {
            return await service.GetDistricts(cancelToken);
        },
        CancellationToken.None);
    });

    return districtsJson;
}

存储库实现了一个我创建的接口方法,叫做

ExecutePolicyServiceCall

public async Task<TResult> ExecutePolicyServiceCall<TResult>(Func<Task<TResult>> executePolicyServiceCall)
{
    try
    {
        return await executePolicyServiceCall?.Invoke();
    }
    ...
}

我的测试设置是:

var mockService = new Mock<ICPService>();
mockService.Setup(api => api.GetDistricts(It.IsAny<CancellationToken>()))
            .Throws<TaskCanceledException>();

var itemRepository = new ItemsRepository(mockService.Object, Service.GetPolicyRegistry());
var teacherRepository = new TeacherRepository(mockService.Object, Service.GetPolicyRegistry());

var signInModel = new SignInModel(geolocations, itemRepository, teacherRepository);
await signInModel.LoadDistricts("Add District");

然而,当我验证时:

mockService.Verify(api => api.GetDistricts(It.IsAny<CancellationToken>()), Times.Exactly(3), "TaskCanceledException failed to retry 3 times.");

单元测试错误清楚地表明

GetDistricts(...)
没有收到来自Polly
CancellationToken
policy.ExecuteAsync(Func<CancellationToken, Task<TResult>>,...)

有什么办法让它收到正确的

CancellationToken
GetDistricts
参数定义为
CancellationToken token = default
.

c# unit-testing moq polly cancellation-token
© www.soinside.com 2019 - 2024. All rights reserved.