gpt4 book ai didi

c# - 我如何对这个(正确地)抛出异常的异步方法进行单元测试?

转载 作者:可可西里 更新时间:2023-11-01 08:36:28 27 4
gpt4 key购买 nike

我在接口(interface)中有以下方法..

Task<SearchResult<T>> SearchAsync(TU searchOptions);

效果很好。

现在我正在尝试进行单元测试以测试何时出现问题 - 代码会抛出异常。

在这种情况下,我已将我的方法设置为抛出 HttpRequestException。我的单元测试没有说我抛出了那个异常..

var result = Should.Throw<HttpRequestException>
(async () => await service.SearchAsync(searchOptions));

单元测试的错误信息是

Shouldly.ChuckedAWobbly
var result = Should
throw
System.Net.Http.HttpRequestException
but does not

所以 assertion framework是说:你已经预料到一个异常,但没有被抛出。

当我单步执行代码时,100% 抛出了异常。

任何人都可以看到我的单元测试代码做错了什么吗?

最佳答案

问题是您的断言框架不理解异步方法。我建议您向他们提出问题。

与此同时,您可以使用 source for Should.Throw编写您自己的 MyShould.ThrowAsync:

public static async Task<TException> ThrowAsync<TException>(Func<Task> actual)
where TException : Exception
{
try
{
await actual();
}
catch (TException e)
{
return e;
}
catch (Exception e)
{
throw new ChuckedAWobbly(new ShouldlyMessage(typeof(TException), e.GetType()).ToString());
}

throw new ChuckedAWobbly(new ShouldlyMessage(typeof(TException)).ToString());
}

并这样使用它:

var result = await MyShould.ThrowAsync<HttpRequestException>
(async () => await service.SearchAsync(searchOptions));

或稍微简单和等效的:

var result = await MyShould.ThrowAsync<HttpRequestException>
(() => service.SearchAsync(searchOptions));

关于c# - 我如何对这个(正确地)抛出异常的异步方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22402701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com