【发布时间】:2021-02-19 06:13:00
【问题描述】:
我有这个方法需要测试
public async Task<IActionResult> Completed(string nprUserId, [FromBody] DateRangeDto model)
{
var result = await _geAppService.Completed<ExpandoObject>(nprUserId, model.StartDate, model.EndDate);
var r = result as OperationResult;
if (r == null)
{
// There is no error. Return JSON
return Json(result, camelCaseOption);
}
else
{
// An error occurred. Return a 404 and include the error message
return NotFound(r.ErrorMessage);
}
}
这是我的测试
[Fact]
[Trait("Controller", "Completed")]
public async Task Completed_WhenRIsNotNull_ReturnNotFoundWithMessage()
{
//arrange
string nprUserId = string.Empty;
var model = CreateRandomDateRangeDto();
OperationResult r = CreateRandomOperationResult();
var startDate = DateTime.Now;
var endDate = DateTime.Now;
//I tried this
A.CallTo(nprAppService)
.Where(call => call.Method.Name == "Completed")
.WithReturnType<OperationResult>()
.Returns(r);
//I tried this as well
A.CallTo(() => nprAppService.Completed<ExpandoObject>(nprUserId, startDate, endDate))
.Returns(r);
//act
var result = await controller.Completed(nprUserId, model);
// Assert
A.CallTo(() => nprAppService.Completed<ExpandoObject>(nprUserId, startDate, endDate))
.MustHaveHappened();
result.Should().BeOfType<NotFoundObjectResult>()
.Subject.Value.Should().BeOfType<string>();
}
当 sut: 控制器被调用时,Complete 泛型方法返回一个对象而不是 OperationResult。
我该如何解决这个问题?
【问题讨论】:
-
为什么你的方法不起作用:第一种方法:我们看不到
nprAppService.Completed的定义,但基于r = result as OperationResult,我猜它不会返回@ 987654325@。所以WithReturnType<OperationResult>导致您的呼叫配置不匹配。我希望如果你把它切换到WithNonVoidReturnType,你会成功的。第二种方法:正如@Chekkan 所说,您将伪造配置为仅响应特定日期参数,因此当提供其他参数时,FakeItEasy 应用其默认行为。
标签: c# unit-testing fakeiteasy