当前位置: 首页 > 面试题库 >

崎Unit的单元测试

桑宇
2023-03-14
问题内容

我想在Scrapy(屏幕抓取器/网络搜寻器)中实现一些单元测试。由于项目是通过“ scrapy
crawl”命令运行的,所以我可以通过诸如“鼻子”之类的东西来运行它。由于scrapy建立在扭曲之上,我可以使用其单元测试框架Trial吗?如果是这样,怎么办?否则,我想获得
的鼻子 工作。

更新:

我一直在谈论Scrapy-Users,我想我应该“在测试代码中构建Response,然后使用响应调用该方法并断言[I]在输出中获得了预期的项目/请求”。我似乎无法使它正常工作。

我可以在测试中构建单元测试类:

  • 创建一个响应对象
  • 尝试使用响应对象调用我的Spider的parse方法

但是,最终会生成此回溯。为什么有任何见解?


问题答案:

我这样做的方法是创建虚假响应,这样您就可以离线测试解析函数。但是您可以通过使用真实的HTML获得真实的情况。

这种方法的问题是您的本地HTML文件可能无法反映在线的最新状态。因此,如果HTML在线更改,您可能会遇到一个大错误,但是您的测试用例仍会通过。因此,这可能不是测试此方法的最佳方法。

我当前的工作流程是,每当出现错误时,我都会使用url向管理员发送电子邮件。然后针对该特定错误,创建一个HTML文件,其中包含引起错误的内容。然后,我为此创建一个单元测试。

这是我用来创建示例Scrapy http响应以从本地html文件进行测试的代码:

# scrapyproject/tests/responses/__init__.py

import os

from scrapy.http import Response, Request

def fake_response_from_file(file_name, url=None):
    """
    Create a Scrapy fake HTTP response from a HTML file
    @param file_name: The relative filename from the responses directory,
                      but absolute paths are also accepted.
    @param url: The URL of the response.
    returns: A scrapy HTTP response which can be used for unittesting.
    """
    if not url:
        url = 'http://www.example.com'

    request = Request(url=url)
    if not file_name[0] == '/':
        responses_dir = os.path.dirname(os.path.realpath(__file__))
        file_path = os.path.html" target="_blank">join(responses_dir, file_name)
    else:
        file_path = file_name

    file_content = open(file_path, 'r').read()

    response = Response(url=url,
        request=request,
        body=file_content)
    response.encoding = 'utf-8'
    return response

样本html文件位于scrapyproject / tests / responses / osdir / sample.html中

然后,测试用例可能如下所示:测试用例的位置为scrapyproject / tests / test_osdir.py

import unittest
from scrapyproject.spiders import osdir_spider
from responses import fake_response_from_file

class OsdirSpiderTest(unittest.TestCase):

    def setUp(self):
        self.spider = osdir_spider.DirectorySpider()

    def _test_item_results(self, results, expected_length):
        count = 0
        permalinks = set()
        for item in results:
            self.assertIsNotNone(item['content'])
            self.assertIsNotNone(item['title'])
        self.assertEqual(count, expected_length)

    def test_parse(self):
        results = self.spider.parse(fake_response_from_file('osdir/sample.html'))
        self._test_item_results(results, 10)

基本上,这就是我测试解析方法的方式,但不仅限于解析方法。如果它变得更复杂,我建议看看Mox



 类似资料:
  • 问题内容: 我想在Scrapy(屏幕抓取工具/网络抓取工具)中实现一些单元测试。由于项目是通过“ scrapy crawl”命令运行的,所以我可以通过诸如“鼻子”之类的东西来运行它。由于scrapy建立在扭曲之上,我可以使用其单元测试框架Trial吗?如果是这样,怎么办?否则,我想获得的鼻子工作。 更新: 我一直在谈论Scrapy-Users,我想我应该“在测试代码中构建Response,然后使用

  • 本文向大家介绍unit-testing 基本单元测试,包括了unit-testing 基本单元测试的使用技巧和注意事项,需要的朋友参考一下 示例 简单来说,单元测试包含三个阶段: 准备测试环境 执行要测试的代码 验证预期行为与观察到的行为是否匹配 这三个阶段通常称为“安排-行动-断言”或“给予-当-然后-当”。 下面是使用NUnit框架的C#示例。 如有必要,可以进行可选的第四清理阶段。

  • Spring Boot提供了一种为Rest Controller文件编写单元测试的简便方法。 在SpringJUnit4ClassRunner和MockMvc的帮助下,我们可以创建一个Web应用程序上下文来为Rest Controller文件编写单元测试。 单元测试应该写在src/test/java目录下,用于编写测试的类路径资源应该放在src/test/resources目录下。 对于编写单元测

  • 单元测试在软件开发中起着重要作用。 IntelliJ支持各种单元测试框架,如JUnit,TestNG,Spock等等。 在本章中,我们将使用JUnit3。 创建单元测试 在本节中,我们将学习如何创建单元测试。 按照以下步骤创建测试 - 选择Navigate → Test选项。 将出现一个对话框,您必须选择“ Create New Test 。 按照屏幕上的说明继续 - 提供有关测试的详细信息,如测

  • 单元测试是开发大型项目的重要过程。 Unit tests有助于在开发的每个阶段自动测试应用程序的组件。 当应用程序的组件根据项目的业务规范不工作时,它会发出警报。 单元测试可以手动完成,但通常是自动化的。 PHPUnit FuelPHP框架与PHPUnit测试框架集成。 要编写FuelPHP框架的单元测试,我们需要设置PHPUnit。 如果未安装PHPUnit,则下载并安装它。 我们可以使用以下命

  • 单元测试涉及测试应用程序的每个单元。 它可以帮助开发人员在不运行整个复杂应用程序的情况下测试小功能。 名为“test”的Dart external library提供了编写和运行单元测试的标准方法。 Dart_programming单元测试涉及以下步骤 - Step 1: Installing the "test" package 要在当前项目中安装第三方软件包,您需要pubspec.yaml文件