外部服务测试用例因 - NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException 无法找到返回的调用而失败

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

我正在为外部服务方法编写测试用例。我已经按照你应该的方式设置了测试,但它仍然会抛出上述错误。

实际方法和测试方法

实际方法:

{
    ProviderCancelResult? uriResponse;
    try
    {
        uriResponse =
            await _httpClient.GetFromJsonAsync<ProviderCancelResult>($"CancelRescue?jobid={jobId}",
                                                                   cancellationToken);
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }

    var result = _mapper.Map<CancelResponse>(uriResponse);

    return result;
}

测试方法:

public async Task CancelJobAsync_ShouldReturnCancelResponse_WhenCalled()
{
    //Arrange
    var jobId = 2023000001;

    var providerCancelResult = new ProviderCancelResult
    {
        CancelRescueResult = new CancelRescueResult
        {
            Message = new RescueMessage
            {
                Code = "",
                MessageText = "OK"
            },
            Status = 0
        }
    };

    var cancelResponse = new CancelResponse
    {
        Message = "OK",
        Status = 501
    };

    _httpClient.GetFromJsonAsync<ProviderCancelResult>(Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns(providerCancelResult);

    _mapper.Map<CancelResponse>(providerCancelResult).Returns(cancelResponse);

    //Act
    var result = await _sut.CancelJobAsync(jobId);

    //Assert
    result.Should().BeEquivalentTo(cancelResponse);
}

错误: NSubstitute.Exceptions.CouldNotSetReturnDueToNoLastCallException 找不到返回的电话。

确保在调用替代品后调用 Returns()(例如:mySub.SomeMethod().Returns(value)), 并且您没有在 Returns() 中配置其他替代品(例如,避免这种情况:mySub.SomeMethod().Returns(ConfigOtherSub()))。

如果您替换了一个类而不是一个接口,请检查对您的替换的调用是在一个虚拟/抽象成员上。 不能为非虚拟/非抽象成员配置返回值。

正确使用: mySub.SomeMethod().Returns(returnValue);

潜在的使用问题: mySub.SomeMethod().Returns(ConfigOtherSub()); 而是尝试: var returnValue = ConfigOtherSub(); mySub.SomeMethod().Returns(returnValue);

在 NSubstitute.Core.ThreadLocalContext.LastCallShouldReturn(IReturn value, MatchArgs matchArgs) 在 NSubstitute.SubstituteExtensions.Returns[T](MatchArgs matchArgs, T returnThis, T[] returnThese) 在 NSubstitute.SubstituteExtensions.Returns[T](Task`1 value, T returnThis, T[] returnThese) 在 TheAA.RescueService.ExternalServices.Tests.Implementations.ExternalServiceTests.CancelJobAsync_ShouldReturnCancelResponse_WhenCalled() 在 C:\Development\dotnet-rescue-service\src\TheAA.RescueService.ExternalService.Tests\Implementations\ExternalServiceTests.cs:line 88

.net testing .net-core xunit
© www.soinside.com 2019 - 2024. All rights reserved.