现在我们正在构建一个自定义 CMS,但我遇到了一个障碍,我无法完全找出其中的一部分以允许良好的单元测试的最佳方法。
我们的流程如下:
请求进来 --> 解析页面中的组件 --> 找到组件 --> 点击组件 API 获取组件内容
唯一的问题是,当单元测试时,我们点击应用程序的本地 URL,这将不起作用,因为运行测试时应用程序未完全运行。
组件渲染代码:
var componentBody = await httpClient
.GetStringAsync("http://localhost:5001/Api/Components/" + ComponentName + "/View/" + ComponentId);
ComponentStructure componentStructure = this.ParseHtml(componentBody);
单元测试代码:
public async Task TestPageParsing()
{
this.pagesClient = this.clientManager.GetClient<Page, PageData>("pages");
var pages = await this.pagesClient.GetAsync();
this.pageParsingService.FindComponents(pages.Items[0].Data.Text);
}
最佳答案
如果您尝试测试行为而不是底层平台,那么单元测试就足够了。您可以通过模拟平台依赖项(数据库、http 等)并将其替换为返回硬编码事实的模拟来实现此目的。将平台细节留给手动测试。如果你真的想编写集成测试,它仍然应该在你的测试框架中自动化;不需要开发人员手动设置来运行测试。不过,请将它们分开分类,以便人们可以将快速的单元测试与缓慢且长时间运行的集成测试分开运行。
听起来行为就是你想要的。例如,您的 http Web api 返回您想要解析的 html block 。在这种情况下,如果您只是想测试 ParseHtml
是否有效,您甚至不需要模拟。
var html = "<html />";
var result = myObj.ParseHtml(html);
// Make some assertion here
您可以根据预期的 html 编写多个测试用例,还可以针对潜在格式错误的 html 或其他意外场景添加测试用例,以确保 ParseHtml
按预期运行。
关于c# - 对运行时命中应用程序的 API 调用进行单元测试的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731165/