【发布时间】:2017-07-15 01:12:23
【问题描述】:
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 中返回类型必须是异步的,但这里它只返回对象。
以下是我得到的主要错误:
错误 CS0029 无法隐式转换类型
'ProjectAPI.Models.ResModel'到'System.Threading.Tasks.Task<ProjectAPI.Models.ResModel>'UnitTestProjectAPI
【问题讨论】:
-
亲爱的@BartoszKP 我已经编辑了这个问题。并按照您的建议缩小范围。问题必须与创建为 ProjectAPI.Fakes.ShimMobController.GetAllDeatails 的假方法有关。因为这必须返回一个 Async 对象。但这里它只返回一个对象。
-
谢谢,这样好多了。但是,最好将错误消息粘贴到帖子中,这样就完全清楚您在说什么错误:)
-
感谢@BartoszKP 错误 CS0029 无法将类型 'ProjectAPI.Models.ResModel' 隐式转换为 'System.Threading.Tasks.Task
' UnitTestProjectAPI 是我得到的主要错误。问题一定是我创建为假的返回类型与给定的 AsyncTask 方法之间的差异。任何想法......?
标签: asp.net unit-testing async-await microsoft-fakes shim