python - 如何构建相互构建的 Nose 单元测试?

标签 python unit-testing nose

示例

假设您有一个如下所示的假设 API:

import foo

account_name = foo.register()
session = foo.login(account_name)
session.do_something()

关键点是,为了do_something(),您需要注册并登录。

这是一个过于简化的、首次通过的单元测试套件,人们可能会编写:

# test_foo.py
import foo

def test_registration_should_succeed():
    foo.register()

def test_login_should_succeed():
    account_name = foo.register()
    foo.login(account_name)

def test_do_something_should_succeed():
    account_name = foo.register()
    session = foo.login(account_name)
    session.do_something()

问题

当注册失败时,所有测试都会失败,这使得它在哪里变得不明显 真正的问题是。看起来好像一切都坏了,但实际上只有一件至关重要的东西坏了。除非您熟悉所有测试,否则很难找到曾经至关重要的东西。

问题

如何构建单元测试,以便后续测试在其所依赖的核心功能失败时不会执行?

想法

以下是我想到的可能的解决方案。

  1. 手动检测每个测试中的失败并引发 SkipTest。 - 可行,但需要大量手动且容易出错的工作。
  2. 当主要生成器失败时,利用生成器不生成后续测试。 - 不确定这是否真的有效(因为我如何“知道”之前产生的测试失败了)。
  3. 将测试分组到测试类中。例如,这些都是需要您登录的单元测试。 - 不确定这实际上解决了我的问题。难道不会有同样多的失败吗?

最佳答案

我认为更好的答案是使用mock objects,而不是回答明确的问题。 。一般来说,单元测试不应要求访问外部数据库(可能需要登录)。但是,如果您希望进行一些集成测试来执行此操作(这是一个好主意),那么这些测试应该测试集成方面,并且您的单元测试应该测试单位方面。我什至将集成测试和单元测试保存在单独的文件中,以便您可以非常定期快速运行单元测试,并以稍微少一点的速度运行集成测试定期(尽管仍然至少每天一次)。

关于python - 如何构建相互构建的 Nose 单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657497/

相关文章:

python - tensorflow 对象检测 API train.py 仅使用 CPU 完成训练需要多长时间?

iphone - 如何对异步 API 进行单元测试?

angularjs - 在 AngularJs 应用程序上使用 Mocha 设置单元测试

python - 在单元测试中分配模拟变量值

python - 如何模拟补丁类的每个方法

python - 诗歌 + Cython + 测试(Nosetests)

Python Nose 测试示例

python - 在不知道列和行的情况下替换 Pandas Dataframe 中的某些值

python - aiohttp 和 firebase 以及 firebase-admin - 它是非阻塞的吗? python 3.6

python - 电路 Python MQTT 异常 block