如何为异步 Web API 编写单元测试

本文关键字:单元测试 API Web 异步 | 更新日期: 2023-09-27 18:32:59

我有一个C#和Framework 6的项目。我有一个WEB API来调用这些方法。为异步 WebAPI 方法编写单元测试的最佳方法是什么?

这是我的方法:

[HttpGet]
[Route("GetYears")]
public Task<IEnumerable<Year>> GetYearsAsync()
{
     return reditApplicationsRepository.GetYearsAsync();         
}

如何为异步 Web API 编写单元测试

您也可以

使用await来执行此操作。

[TestMethod]
public async Task GetYearsTest()
{
    //_sut is the System Under Test,  in this case is an instance of your controller
    var years = await _sut.GetYears();
    //Any Assert that you want
}

并存该方法的返回creditApplicationsRepository.GetYearsAsync();使用此Task.FromResult(mockReturn).

单元测试的主要目标是测试方法中代码的功能。因此,异步与否在功能上不应该特别相关。

所以我会说做这样的事情:

[TestMethod]
public void GetYearsTest(){
   //This would assume that your web api class has a mockable repository
   var yourClass = new YourClass(new MockRepository());
   //this is going to run your codes synchronously so you can get an immediate result to test on.
   var years = yourClass.GetYears().Result;
   //Run whatever test you want to on this
   Assert.IsNotNull(years);
}

如果运行异步测试的目的是确定您的代码是否是线程安全的,则必须创造性地确定如何正确测试您的代码以确保它实际上是安全的。为了让我提供帮助,我需要了解有关此处使用的存储库的更多信息,或者哪些变量可能会被线程锁定或导致错误。