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谢谢。