py.test在类下没有找到测试

Mic*_*ali 18 python unit-testing pytest pycharm

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

这个类下的这个方法

class ClassUnderTestTests:

    def test_something(self):
Run Code Online (Sandbox Code Playgroud)

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

这个

def test_something(self):
Run Code Online (Sandbox Code Playgroud)

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

我想把我的测试分组在类下,除非我遗漏了一些我正在遵循py.test规范来做到这一点.

环境:Windows 7,pyCharm,py.test设置为测试运行器.

twi*_*wil 29

按照惯例,它会搜索

测试前缀测试类(没有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')
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档

  • 我想补充说,这些必须是常规方法,"@ staticmethod`将无法找到 (5认同)

Ste*_*eve 17

接受的答案并非不正确,但不完整。此外,它包含的文档链接不再有效,该答案的评论中更新的链接也不再有效。

现在可以在此处找到当前文档。该文档的相关部分是:

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

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

我在这里被绊倒的地方(我想许多其他人也会被绊倒)是,我通常命名只包含类定义的 Python 源文件,以直接反映类的名称。因此,如果我的类名为MyClass ,我通常将其代码放在名为MyClass.py的文件中。然后,我将类的测试代码放入名为TestMyClass.py的文件中。这不适用于 PyTest。为了让 PyTest 对我的测试类执行其操作,我需要将该类的文件命名为test_MyClass.pyMyClass_test.py。我选择了最后一种形式,这样我通常会在文件名中添加一个“ _test ”后缀,否则我会选择需要命名的文件,以便 PyTest 解析它们以查找测试。