首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何处理xUnit .Net的Assert.Throws<T>中的任务抛出的异常?

如何处理xUnit .Net的Assert.Throws<T>中的任务抛出的异常?
EN

Stack Overflow用户
提问于 2012-12-30 02:59:12
回答 1查看 14.9K关注 0票数 21

以下带有标记有async修饰符的lambda的异步xUnit.net测试失败,报告没有抛出异常:

代码语言:javascript
复制
    [Theory, AutoWebData]
    public async Task SearchWithNullQueryThrows(
        SearchService sut,
        CancellationToken dummyToken)
    {
        // Fixture setup
        // Exercise system and verify outcome
        Assert.Throws<ArgumentNullException>(async () =>
            await sut.SearchAsync(null, dummyToken));
        // Teardown
    }

为了确保真正抛出ArgumentNullException,我显式地使用了try-catch块。它起作用了,但是结果代码并不干净(与第一个测试相比):

代码语言:javascript
复制
[Theory, AutoWebData]
public async Task SearchWithNullQueryThrows(
    SearchService sut,
    CancellationToken dummyToken)
{
    // Fixture setup
    var expected = typeof(ArgumentNullException);
    Type actual = null;
    // Exercise system
    try
    {
        await sut.SearchAsync(null, dummyToken);
    }
    catch (ArgumentNullException e)
    {
        actual = e.GetType();
    }
    // Verify outcome
    Assert.Equal(expected, actual);
    // Teardown
}

为什么带有标记了async修饰符的lambdaAssert.Throws<T>失败?

EN

回答 1

Stack Overflow用户

发布于 2015-11-25 17:22:23

如果您还需要返回异常来验证它,那么这可能会很有用:

代码语言:javascript
复制
public static async Task<Exception> AssertThrowsAsync<TException>(Func<Task> func)
    {
        var expected = typeof (TException);
        Exception exception = null;
        Type actual = null;
        try
        {
            await func();
        }
        catch (Exception e)
        {
            actual = e.GetType();
            exception = e;
        }
        Assert.NotNull(exception);
        Assert.Equal(expected, actual);
        return exception;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14084923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档