asynchronous - xUnit 不接受带有返回 Task<> 的方法的同步抛出
问题描述
我正在为返回 aTask<>
但不是的方法编写单元测试async
。xUnit.net仍然希望我用来ThrowsAsync
检查抛出的异常:
错误 CS0619“Assert.Throws(Func)”已过时:“在测试异步代码时,您必须调用 Assert.ThrowsAsync(并等待结果)。”
该方法返回 aTask<>
因为它是一个接口的实现,其中一些实现确实运行async
。
这是界面:
public interface IPtlCommand
{
Task<PtlResult> Execute(string[] args);
}
和实施:
public class SetTag : IPtlCommand
{
public Task<PtlResult> Execute(string[] args)
{
return Task.FromResult<PtlResult>(new PtlResult());
}
}
我的测试代码(给出编译器错误):
[Fact]
public void SetTag_ThrowsArgumentExceptionWhenNoTag()
{
var command = new SetTag();
// act & assert
Assert.Throws<ArgumentException>(() => command.Execute(new string[] { "host" }));
}
通话中的其他测试command.Execute
确实可以正常工作,也没有await
.
解决方案
如果您使用的是 Visual Studio,它会建议您使用快速操作来解决问题。如果您要求它实施该建议,它将改变测试:
[Fact]
public async Task SetTag_ThrowsArgumentExceptionWhenNoTag()
{
var command = new SetTag();
// act & assert
await Assert.ThrowsAsync<ArgumentException>(
() => command.Execute(new string[] { "host" }));
}
这个测试现在编译(并且失败,因为Execute
不抛出异常)。
推荐阅读
- reactjs - setState 到 store 组件中
- php - 我如何使用 php 连接 mssql?
- python - python中的字符串和字典问题
- javascript - 如何避免 NW.js 中的跨域请求阻塞
- apache-kafka - KSQL 流 - 从结构数组中获取数据
- dns - 如何查找所有 IP 的 DNS 记录?
- python - 如何使用Docusign Python客户端[ApiClient.request_jwt_application_token()]生成的OAuth Applciation令牌?
- python - 方法作为带有 self 参数的参数
- javascript - ajax 到 php post - 所有发送和接收但 php 失败
- asp.net - Web 主机上的配置错误,无法加载文件或程序集