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>'
未itTestProjectAPI
答案 0 :(得分:1)
错误消息明确指出它无法将ResModel
转换为Task<ResModel>
,这是被修剪方法的返回类型。
在该方法假设返回任务时,您将返回模型。使用Task.FromResult
将模型包装在Task中,以便可以返回并等待它。
在执行测试方法时,您声明用于保存等待结果的变量是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);
}
}
答案 1 :(得分:0)
更改方法返回类型 到
(公共异步任务 &LT; ResModel&GT; GetFromGetDetails()