【问题标题】:py.test does not find tests under a classpy.test 在类下找不到测试
【发布时间】:2013-11-29 01:27:19
【问题描述】:

我正在尝试创建不基于单元测试的测试类。

这个类下的这个方法

class ClassUnderTestTests:

    def test_something(self):

当您从命令行调用 py.test 或在 PyCharm 中运行此测试(它在自己的模块上)时,无法检测和运行。

这个

def test_something(self):

可以检测并运行类外的相同方法。

我想将我的测试归类,除非我遗漏了什么,否则我会关注 py.test spec 来做到这一点。

环境:Windows 7,将 py.test 设置为测试运行器的 PyCharm。

【问题讨论】:

标签: python unit-testing pycharm pytest


【解决方案1】:

按照惯例,它会搜索

测试前缀测试类(没有 init 方法)

例如。

# content of test_class.py
class TestClass:
    def test_one(self):
        x = "this"
        assert 'h' in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, 'check')

请参阅文档here

【讨论】:

  • 我想补充一下,这些需要是常规方法,@staticmethod不会被找到
【解决方案2】:

接受的答案不是错误的,但它是不完整的。此外,它包含的文档链接不再有效,对该答案的评论中的更新链接也不再有效。

现在可以在here 找到当前文档。该文档的相关位是:

  • ...
  • 在这些目录中,搜索 test_*.py*_test.py 文件,由他们的测试包名称。
  • 从这些文件中,收集测试项目:
    • ...
    • test 前缀测试函数或方法在 Test 前缀测试类中(没有 __init__ 方法)

在接受的答案中缺少的关键位是,不仅类名必须以 Test 开头,而且不能有 __init__ 方法,但包含类的文件的名称​​必须test_* 形式之一。 py*_test.py

我在这里被绊倒的地方,我想很多其他人也会,是我通常命名我的 Python 源文件,其中只包含一个类定义,以直接反映类的名称。因此,如果我的类名为 TestClass,我通常会将其代码放在名为 TestClass.py 的文件中。这不适用于 PyTest。为了让 PyTest 对我的测试类做它的事情,我需要为这个类命名文件 test_class.pytest_TestClass.pyTestClass_test.py等。我选择了最后一种形式,所以我一般会添加一个'_test em>' 文件名的后缀,否则我会选择需要命名的文件名,以便 PyTest 解析它们以查找测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多