C# xUnit异常失败
我不知道我的单元测试失败的原因: 试验方法:C# xUnit异常失败,c#,xunit,C#,Xunit,我不知道我的单元测试失败的原因: 试验方法: public async Task<MyType> Get(string externalId) { if (externalId == null) throw new ArgumentNullException(); if (externalId == "" || externalId == " ") throw new FormatException(); // ...
public async Task<MyType> Get(string externalId)
{
if (externalId == null)
throw new ArgumentNullException();
if (externalId == "" || externalId == " ")
throw new FormatException();
// ...
}
公共异步任务获取(字符串外部ID)
{
if(externalId==null)
抛出新ArgumentNullException();
if(externalId==“”| | externalId==“”)
抛出新的FormatException();
// ...
}
单元测试:
Action action = async () => await controller.Get(null);
// Act & Assert
action.ShouldThrow<ArgumentNullException>();
Action-Action=async()=>wait-controller.Get(null);
//行动与主张
动作。ShouldThrow();
由于错误消息显示:
应引发ArgumentNullException,但未引发Exection
这很奇怪,因为调试这个测试时抛出了异常行
我正在使用xunit和FluentAssertions。这一行就是问题所在:
Action action = async () => await controller.Get(null);
它创建了一个async void
方法,这使得观察异常(从而进行适当的测试)非常困难
,Fluent断言仅支持反模式风格的“异步”断言:
sut.Awaiting(…).ShouldThrow<T>();
不太漂亮
或者,您可以使用自己的异步兼容断言,如:
wait AsyncAssert.ThrowsAsync(()=>controller.Get(null));
这一行就是问题所在:
Action action = async () => await controller.Get(null);
它创建了一个async void
方法,这使得观察异常(从而进行适当的测试)非常困难
,Fluent断言仅支持反模式风格的“异步”断言:
sut.Awaiting(…).ShouldThrow<T>();
不太漂亮
或者,您可以使用自己的异步兼容断言,如:
wait AsyncAssert.ThrowsAsync(()=>controller.Get(null));
为什么单元测试包含产品代码?我怀疑你复制粘贴了错误的东西。请提供。您没有等待操作,因此即使发生异常,也不会观察到异常。使用Func而不是Action并等待它,然后将观察到异常。@MartinCostello谢谢。为什么单元测试包含prod代码?我怀疑你复制粘贴了错误的东西。请提供。您没有等待操作,因此即使发生异常,也不会观察到异常。使用Func而不是Action并等待它,然后将观察到异常。@MartinCostello谢谢。