如何测试API控制器与异步函数
本文关键字:控制器 异步 函数 API 何测试 测试 | 更新日期: 2023-09-27 18:02:08
我试图使用MSTest对我的API控制器进行单元测试。我遵循这里提到的教程:https://www.asp.net/web-api/overview/testing-and-debugging/mocking-entity-framework-when-unit-testing-aspnet-web-api-2
遗憾的是,上面的教程没有介绍如何调整以使控制器中的异步函数工作。
在下面的代码中,如果我在非异步控制器操作上运行测试,则测试将成功运行。但是当我在async函数上测试它时,它给了我一个错误。
public async Task GetService_ShouldReturnCorrectServiceId()
{
//Arrange
var context = new TestContext();
context.Services.Add(new Service { Service_ID = 1, Service_Name = "WEBAPPS"});
//Act
var controller = new ServicesController(context);
var result = await controller.GetServiceId("WEBAPPS") as OkNegotiatedContentResult<Service>;
//Assert
Assert.IsNotNull(result);
Assert.AreEqual(1, result.Content.Service_ID);
}
测试失败,给出如下错误:
我的控制器方法是:源可查询项的提供者没有实现idbasyncqueryprovider
public async Task<IHttpActionResult> GetServiceId(string name)
{
var service_id = await db.Services
.Where(s => (s.Service_Name == name))
.FirstOrDefaultAsync();
if (service_id == null)
{
return NotFound();
}
return Ok(service_id);
}
TestContext文件是:
class TestContext : IContext
{
public TestContext ()
{
this.Services = new TestServiceDbSet();
}
public DbSet<Service> Services { get; set; }
public void Dispose() { }
}
我已经按照上面链接的所有步骤做了。我认为TestDbSet代码(见链接)必须更新,以考虑异步方法,但我不确定如何。
感谢您的帮助!谢谢。
您将需要实现一个aync QueryProvider。请查看本文中使用异步查询进行测试。