gpt4 book ai didi

c# - 使用 Nunit 在 ASP MVC Controller 中测试异步方法

转载 作者:行者123 更新时间:2023-11-30 15:58:45 27 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 应用程序,带有一个具有异步方法的 Controller ,返回 Task<PartialViewResult>对象并标有 async 关键字。该方法仅以异步方式从数据库中获取数据。

public async Task<PartialViewResult> SomeMethod()
{
using (var unitOfWork = _factory.Create())
{
var result = await unitOfWork.SomeRepository.GetAsync();

return PartialView(result);
};
}

在测试期间,流只是卡住在这个位置(在运行时这段代码运行良好):

var models = await unitOfWork.SomeRepository.GetAsync();

这是我对这个方法的测试:

public void GetExchange_GetView_OkModelIsViewModel()
{
//fake Repository returns fake Data from DB
var mockSomeRepository = new Mock<ISomeRepository>();
mockSomeRepository.Setup(x => x.GetAsync(...).Returns(new Task<List<SomeType>>(() => new List<SomeType>()));

//fake UoW returns fake Repository
var mockUnitOfWork = new Mock<IUnitOfWork>();
mockUnitOfWork.Setup(x => x.SomeRepository).Returns(mockSomeRepository.Object);

//fake factory create fake UoW
var fakeUnitOfWorkFactory = new Mock<UnitOfWorkFactory>();
fakeUnitOfWorkFactory.Setup(x => x.Create()).Returns(mockUnitOfWork.Object);

//Our controller
var controller = new SomeController(fakeUnitOfWorkFactory);

//Our async method
var result = controller.SomeMethod();
result.Wait();

//---Assert--
}

问题:为什么我的方法中的流在测试执行期间卡住???

更新

如果我替换
,此测试开始工作

var result = await unitOfWork.SomeRepository.GetAsync(); 

var models = unitOfWork.SomeRepository.GetAsync();
models.Start();
models.Wait();
var result = models.Result;

但我不太明白为什么会这样。谁能解释一下?

最佳答案

测试异步方法时,您的测试方法也应该是异步的。 NUnit 可以毫无问题地处理这个问题。

[Test]
public async Task GetExchange_GetView_OkModelIsViewModel() {
// ...

var controller = new SomeController(fakeUnitOfWorkFactory);
var result = await controller.SomeMethod(); // call using await

// ...
}

关于c# - 使用 Nunit 在 ASP MVC Controller 中测试异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576653/

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