gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:05:06 25 4
gpt4 key购买 nike

例子

假设您有这样一个假设的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com