c# - 对运行时命中应用程序的 API 调用进行单元测试的最佳方法

标签 c# unit-testing .net-core

现在我们正在构建一个自定义 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/

相关文章:

C# HttpClient 不处理 304/307 重定向

c# - VSTests - 找不到诊断数据适配器 'Code Coverage'

AngularFireDatabase、Jest 和单元测试,如何创建可重用的类 stub ?

c# - 使用 Moq 是否毫无意义,因为 Returns() 重新定义了您的方法的行为?

c# - 通过Docker容器进行Akka.net远程处理:客户端随机无法连接到主机

c# - .NET Core 3/EF.Core 3 : what happened to `QueryModelGenerator` , `RelationalQueryModelVisitor`等

c# - 拆分字符串或 XML 以将 ID 发送到存储过程?

c# - 如何动态确定类型是否是使用反射的接口(interface)?

c# - WCF 服务、Windows 身份验证

c# - 转换 IQueryable 以实现 IAsyncEnumerable