对运行时会击中应用程序的API调用进行单元测试的最佳方法

时间:2018-08-07 16:08:19

标签: 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);
    }

2 个答案:

答案 0 :(得分:2)

如果您要测试行为而不是基础平台,则只需要单元测试。为此,您可以模拟平台依赖项(数据库,http等),并用返回硬编码事实的模拟替代它们。将平台细节留给手动测试。如果您确实想编写一个集成测试,则仍应在您的测试框架中将其自动化。不需要手动设置即可让开发人员运行测试。不过,将它们分别分类,以便人们可以将运行缓慢的单元测试与运行长期运行的集成测试分开运行。

听起来行为就是您想要的。例如,您的http Web api返回要解析的html块。如果您只是想测试ParseHtml是否有效,在这种情况下甚至不需要模拟。

var html = "<html />";

var result = myObj.ParseHtml(html);

// Make some assertion here

您可以根据预期的html编写多个测试用例,还可以为潜在的格式错误的html或其他意外情况添加测试用例,以确保ParseHtml的行为符合预期。

答案 1 :(得分:1)

看起来这是一个集成测试,而不是单元测试。

您可以模拟对应用程序的调用,并使用固定的响应呈现调用函数,并验证其是否正确呈现。