c# - C# 异步任务 - 单元测试
问题描述
我是 C# 单元测试的新手,必须测试该方法是否正常工作。
这是我到目前为止所拥有的:
public async Task<IHttpActionResult> Post(API_FIRM_LINK aPI_FIRM_LINK)
{
db.API_FIRM_LINK.Add(aPI_FIRM_LINK);
await db.SaveChangesAsync();
return Created(aPI_FIRM_LINK);
}
测试方法:不确定我是否走在正确的道路上如果有人可以根据我的测试提供一个示例
public async Task PostTest()
{
////Arrange
API_FIRM_LINKController controller = new API_FIRM_LINKController();
API_FIRM_LINK aPI_FIRM_LINK = null;
IHttpActionResult expectedResult = await controller.Post(aPI_FIRM_LINK);
//act
IHttpActionResult result = await controller.Post(API_FIRM_LINK, aPI_FIRM_LINK);
////Assert
IComparer<IHttpActionResult> comparer = new IHttpActionResultComparer();
// Assert.IsTrue(comparer.Equals(expectedResult, result));
Assert.IsNotNull(result);
Console.Write(result);
解决方案
如果您使用现代版本,Microsoft.VisualStudio.TestTools.UnitTesting
则可以使用异步测试方法,就像您在问题中所做的那样。
如果要测试您的 Post 函数是否返回预期数据,请执行以下操作:
[TestMethod()]
public async Task PostTestAsync()
{
var controller = new API_FIRM_LINKController();
// TODO: do some preparations, so you can expect a specific return value
IHttpActionResult expectedResult = ...
// call PostAsync and await for it to finish
Task taskPost = controller.PostAsync(API_FIRM_LINK, aPI_FIRM_LINK);
IHttpActionResult result = await taskPost;
// of course this can be done in one line:
IHttpActionResult result = await controller.PostAsync(API_FIRM_LINK, aPI_FIRM_LINK);
// compare whether result equals expectedResult
// for example: create a class that implements IComparer<IHttpActionResult>
IComparer<IHttpActionResult> comparer = new IHttpActionResultComparer();
Assert.IsTrue(comparer.Equals(expectedResult, result);
}
如果您使用无法使用异步测试的测试套件:
[TestMethod()]
public void PostTest()
{
var controller = new API_FIRM_LINKController();
IHttpActionResult expectedResult = ...
// call PostAsync and wait for it to finish
Task taskPost = Task.Run(() => controller.PostAsync(API_FIRM_LINK, aPI_FIRM_LINK));
taskPost.Wait();
IHttpActionResult result = taskPost.Result;
// TODO: compare result with expected result
}
推荐阅读
- reactjs - AntDesign Table 未呈现新价值
- android - Android - 地图标记点击上的场景过渡动画?
- bash - 如何使用命令行在多个文件中搜索代码块并计算其出现次数?
- ios - 我想使用 didSelectRowAt 将数组从 UITableView 显示到下一个 viewController
- android - 如何将变量从 AsyncTask 返回到 Android 中的 Google Map 活动
- command-line - 为什么 python pyinstaller 不能与我的 Python 3.7.0 文件一起使用?
- python-3.x - 从头开始实现 Faster Rcnn
- github - 即使我有足够的访问权限,为什么 Git push 会抛出远程解包失败错误
- google-analytics-api - 如何在我的网站上向用户展示 Google 分析数据?
- swift - 如何快速更新存储节点firebase