Python - 单元测试

标签 python unit-testing web-crawler

如果这是一个非常愚蠢的问题,我很抱歉,但我已经搜索了很长时间,就是想不通。

所以我有一个关于单元测试的问题,不一定是关于 Python 的,但由于我目前正在使用 Python,所以我选择以它为基础提出我的问题。

我知道单元测试的想法,但我在互联网上唯一能找到的是非常简单的单元测试。就像测试方法 sum(a, b) 是否返回 a + b 的总和一样。

但是在处理更复杂的程序时如何应用单元测试呢?作为例子,我写了一个爬虫。我不知道它会返回什么,否则我就不需要爬虫了。那么,我该如何在不知道该方法返回什么的情况下测试爬虫是否正常工作呢?

提前致谢!

最佳答案

整个爬虫可能会进行功能测试(我们会到达那里)。至于单元测试,你可能已经用几个组件编写了你的​​爬虫,比如页面解析器、url 识别器、提取器、重定向处理程序等。这些是你的单元。您应该对它们中的每一个进行单元测试,或者至少对那些至少具有稍微复杂逻辑的测试进行单元测试,您可以在其中为某些输入期望一些输出。请记住,有时您会测试行为,而不是输入/输出,而这正是模拟和 stub 可能派上用场的地方。

至于功能测试 - 您需要创建一些测试场景,例如带有指向您将创建的其他网页的链接的网页,并将它们设置在某个服务器上。然后,您需要对您创建的网页执行抓取,并检查您的抓取工具是否按预期运行(您应该知道会发生什么,因为您将创建这些页面)。

此外,有时在单元测试和功能测试之间执行集成测试也很好。如果您有一些组件一起工作(例如使用重定向处理程序的提取器),最好检查这两个组件是否按预期一起工作(例如,您可以在自己的服务器上创建资源,当提取时将返回重定向 HTTP 代码,并且检查是否按预期处理)。

所以,最后:

  • 为创建应用的组件创建单元测试,看看您是否没有犯过简单的错误

  • 为协同工作的组件创建集成测试,以查看您是否将所有内容很好地粘合在一起

  • 创建功能测试,以确保您的应用按预期工作(因为一些错误可能来自项目,而不是来自实现)

关于Python - 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203648/

相关文章:

python - 使用 networkx 提取所有 k-cores

python - 测试。使用堆叠参数化装饰器时定义预期结果的最佳方法?

xcode 将捕获错误视为测试失败

javascript - 卡斯珀JS : Selecting an option in dropdown menu made of <div> and dynamic classes

javascript - 如何从网站获取JS链接

java - 如何使用 jsoup 输入 url 链接

python - 无法从 flow_from_dataframe 进行训练 意外没有。类(class)数

python - 在 Python 中继承 int

python - isin、str.contains 和 if 条件的区别?

ruby-on-rails - 错误测试创建操作