【问题标题】:Having tests in multiple files在多个文件中进行测试
【发布时间】:2012-08-27 16:17:38
【问题描述】:

我正在为大型项目使用金字塔框架,我发现将所有测试都放在一个 tests.py 文件中很麻烦。所以我决定创建一个包含我的测试文件的目录。问题是,我不知道如何告诉金字塔从这个目录运行我的测试。

我正在使用 python setup.py test -q 运行测试。

但是,在我将测试移动到测试目录之后,这当然不起作用。怎么做才能让它发挥作用?

【问题讨论】:

    标签: python testing pyramid


    【解决方案1】:

    首先,您需要通过在其中创建__init__.py 来确保tests 不仅仅是一个目录,而是一个Python 包。

    您还需要确保将 tests 包中的模块命名为 test_something.py

    大多数测试运行者,作为他们测试发现的一部分,寻找一个名为 tests 的模块或包,该包中的模块以 test_ 开头,并期望测试方法的方法名称(在 TestCase 子类上)开始test_

    unittest 模块将测试运行器描述为:

    测试运行器是一个编排测试执行的组件 并将结果提供给用户。跑步者可以使用图形 接口,文本接口,或返回一个特殊值来表示 执行测试的结果。

    有很多不同的测试框架和测试运行器,大多数以某种方式扩展unittest 并寻找unittest.TestCase 子类。他们可能会做不同类型的test discovery,以不同的方式呈现结果,或者在运行测试时收集code coverage

    至于相对导入:你真的应该尽量避免这些。它们使移动代码变得更加困难(正如您刚刚注意到的)并降低了导入的可读性(从哪里导入什么代码?)。只需使用from myproject.views import my_view - 事情的位置就更清楚了

    【讨论】:

      【解决方案2】:

      我终于找到了方法。我刚刚创建了名为测试的目录,将我的测试放入其中并创建了空文件__init__.py。我需要修复相对导入,否则会出现奇怪的错误,例如:

      AttributeError: 'module' object has no attribute 'tests'

      我不太明白发生了什么,这里的nosetest 角色是什么,但它确实有效。

      如果有人能够更深入地解释这个问题,那就太好了。

      【讨论】:

      • 我在搜索您发布的 AttributeError 的修复程序时偶然发现了这一点。对于其他搜索此问题的人,当我将所有相对导入更改为绝对导入(例如从 .models import Base 到 from projectname.models import Base)时,问题得到解决
      【解决方案3】:

      尝试使用nose
      http://nose.readthedocs.org/en/latest/
      如果您的所有测试文件都以“Test”开头,nosetests 应该将它们全部提取并运行它们。

      【讨论】:

      • 太好了,因此您甚至可能不必安装它。只需确保您的测试在一个文件夹中,并且它们的文件名以“test”开头,然后转到该目录并运行nosetests。
      猜你喜欢
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2018-12-28
      • 2018-01-01
      相关资源
      最近更新 更多