gpt4 book ai didi

asp.net - 如何对等待另一个异步任务的 AsyncTask 进行单元测试?

转载 作者:行者123 更新时间:2023-12-02 11:02:50 24 4
gpt4 key购买 nike

public async Task<ResModel> GetDetails()
{
ResModel resp = new ResModel();
resp = await MobController.GetAllDeatails();
return resp;
}

await这需要一个名为 GetAllDeatails 的异步任务方法并返回一个对象 ResModel

如何为此正确创建单元测试?

我创建的单元测试如下:

[TestMethod]
public async Task GetFromGetDetails()
{
var controller = new SevicesController();
ResModel resp = new ResModel();

using(ShimsContext.Create())
{
ProjectAPI.Fakes.ShimMobController.GetAllDeatails = () => {
resp.MessageType = "Get"
resp.Message ="contdetail";

return resp;
};

returnValueOfAsyncTask = await controller.GetDetails();

Assert.IsNotNull(returnValueOfAsyncTask);
}

}

这会在 ShimContext 中给出错误创建,因为返回类型在 GetAllDeatails 中必须是异步的但这里它只返回对象。

以下是我遇到的主要错误:

Error CS0029 Cannot implicitly convert type 'ProjectAPI.Models.ResModel' to 'System.Threading.Tasks.Task<ProjectAPI.Models.ResModel>' Un‌​itTestProjectAPI

最佳答案

错误消息明确指出它无法转换 ResModelTask<ResModel>这是正在填充的方法的返回类型。

在垫片中,当方法应该返回任务时,您将返回模型。使用Task.FromResult为了将模型包装在任务中,以便可以返回并等待它。

在测试方法的练习中,您声明用于保存等待结果的变量是 Task<ResModel> 。这应该改变,因为当你 await返回结果的任务它只会返回结果而不是任务。因此,结果变量需要更改为 Task<ResModel>ResModel .

这是基于上述更改的更新单元测试。

[TestMethod]
public async Task GetFromGetDetails() {
//Arrange
var controller = new SevicesController();
var expected = new ResModel();

using(ShimsContext.Create()) {

ProjectAPI.Fakes.ShimMobController.GetAllDeatails = () => {
expected.MessageType = "Get"
expected.Message ="contdetail";

return Task.FromResult(expected);
};

//Act
var actual = await controller.GetDetails();

//Assert
Assert.IsNotNull(actual);
Assert.AreEqual(expected, actual);
}
}

关于asp.net - 如何对等待另一个异步任务的 AsyncTask 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434654/

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