我正在为外部服务方法编写测试用例。我已经按照你应该的方式设置了测试,但它仍然会抛出上述错误。
实际方法和测试方法
实际方法:
{
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