【问题标题】:Mocking ScrapySharp response for unit test模拟单元测试的 ScrapySharp 响应
【发布时间】:2019-11-11 15:14:14
【问题描述】:

我在我的干净架构解决方案中使用 ScrapySharp,我需要在我的单元测试中模拟 Scraping 服务响应,以便单元测试是自包含的,实际上不会触及任何外部服务器。

我已经研究过使用 Moq,但没有看到一种方法可以为我的代码返回一个新的 ScrapySharp WebPage,然后在单元测试期间使用。

我的基础设施项目中有一个服务接口:

public interface IScrapeService
{
    WebPage NavigateToPage(Uri url, HttpVerb verb = HttpVerb.Get, string data = "", string contentType = null);
}

然后,我将拥有该服务的真实世界实现,该实现将被注入到使用该服务的类中。我的单元测试将使用在我的测试期间注入的服务的模拟实现。

有没有人尝试过这样的事情,或者如果我没有正确考虑这个问题,可以帮助我吗?

【问题讨论】:

    标签: c# unit-testing tdd scrapysharp


    【解决方案1】:

    这里的问题是:为什么需要将 ScrapySharp 的响应公开为方法的输出值?返回一些仅包含 ScrapySharp 响应中所需信息的自定义模型可能会更好。自定义模型将提供更多优势 - 您的 IScrapeService 接口的所有客户端都不需要显式引用 ScrapySharp。而且,当然,它会给你更好的测试这个接口的能力。

    【讨论】:

    • 谢谢迈克尔。这是一个很好的问题,让我更多地思考返回的内容。我的自定义模型稍后会在代码工作流程中介绍,但我会看看代码是否可以重构为可能返回 html 字符串。问题是有一些表单被操纵和发布以从网站获取数据,然后用于填充我的自定义模型。所以 ScrapeService 正在返回页面以执行此操作。希望我可以重构使用 html 并且问题消失了。为轻推干杯!
    • 最后,我摆脱了 ScrapySharp,只使用了 HttpClient。然后我可以使用 Richard Szalay 的 MockHTTP。我设置了实时和模拟服务,一切看起来都很好。再次感谢迈克尔的指导!
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 2021-05-01
    • 2022-07-11
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多