可能是一个简单的方法,但无法使其正常工作;
我已将方法上的签名更改为Task
在单元测试中,我使用的是流利的断言。
但无法使其正常工作
_catalogVehicleMapper
.Invoking(m => m.MapToCatalogVehiclesAsync(searchResult, filtersInfo, request, default(CancellationToken)))
.Should().Throw<ArgumentException>()
.WithMessage("One of passed arguments has null value in mapping path and can not be mapped");
MapToCatalogVehiclesAsync
是异步方法,但是我需要等待它,但是等待并异步调用似乎并没有做到。
某人..?
答案 0 :(得分:6)
尽管法比奥的答案也是正确的,但您也可以这样做:
_catalogVehicleMapper
.Awaiting(m => m.MapToCatalogVehiclesAsync(searchResult, filtersInfo, request, default(CancellationToken)))
.Should().Throw<ArgumentException>()
.WithMessage("One of passed arguments has null value in mapping path and can not be mapped");
此外,我建议始终在WithMessage
中使用通配符。请参见this blog post中的第10点。
答案 1 :(得分:2)
Invoking<T>
extensoin方法返回Action
,而异步方法等效于async void
-因此不会等待异常。
作为解决方法,您可以将测试下的方法包装到Func<Task>
上。
[Fact]
public async Task ThrowException()
{
Func<Task> run =
() => _catalogVehicleMapper.MapToCatalogVehiclesAsync(
searchResult,
filtersInfo,
request,
default(CancellationToken));
run.Should().Throw<ArgumentException>();
}