【问题标题】:Why am I getting "No tests discovered" with Python tests in VS Code?为什么我在 VS Code 中使用 Python 测试时“未发现任何测试”?
【发布时间】:2019-01-19 22:24:56
【问题描述】:

这是我最初的几行代码,但我已经编码了 20 年,所以我很快就想运行单元测试。

我正在使用

  • Windows 10
  • 2019 年 1 月 7 日起 VS Code 1.30.2。
  • Python 3.7.2
  • Python 扩展 ms-python.python 2018.12.1

这是我所在文件夹的内容。

    Directory: C:\DATA\Git\Py\my_first_code


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       19/01/2019     21:42                __pycache__
-a----       19/01/2019     21:35            289 messing.py
-a----       19/01/2019     21:42            204 test_messing.py
-a----       19/01/2019     22:07              0 __init__.py

据我所知,我不在“venv”中。

这是test_messing.py的内容。

import unittest

class Test_Math(unittest.TestCase):
    def math_multiply__when__2_times_2__then__equals_4(self):
        self.assertEqual(2 * 2, 4)

if __name__ == '__main__':
    unittest.main()

__init__.py 是空的,我添加了它以查看是否有帮助,messing.py 包含大约 8 行代码。

当我尝试在 VS Code 中发现测试时,我得到了。

未发现测试,请检查测试的配置设置。来源:Python(扩展)

更有趣的是,通过 Python 命令行运行测试发现如下所示。

PS C:\DATA\Git\Py\my_first_code> python -m unittest discover -v -s . -p test_*.py

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

【问题讨论】:

    标签: python python-unittest


    【解决方案1】:

    正如unittest 模块的documentation 中所说,您的测试方法名称需要以test 开头。

    测试是用名称以字母 test 开头的方法定义的。此命名约定告知测试运行程序哪些方法代表测试。

    例如

    class TestMath(unittest.TestCase):
        def test_multiply(self):
            self.assertEqual(2 * 2, 4)
    
        def test_multiply_negative(self):
            self.assertEqual(-2 * -2, 4)
            self.assertEqual(2 * -2, -4)
    
        # etc...
    

    请注意,这些都没有真正测试您的messing.py 功能。为此,您需要import messing,在其上调用函数,并断言这些函数返回的值是预期的。

    最后,您应该遵循一些约定:

    • 使用简短的测试名称
    • 避免使用双下划线,因为它们通常指 Python 中的“魔术”变量
    • 不要在每个测试中引用您正在测试的内容,因为套件本身已经通过名称引用它
    • 您的类名不应包含下划线

    【讨论】:

    • 测试方法需要从test..开始!即使在我阅读了您的答案之后-非常感谢您收到了很好的建议,谢谢-我编辑了我的代码,但仍然出错。掌心。我正好相反,类名需要Test*,方法无关紧要。
    • 天啊,我把头发拉出来了……一次又一次没有发现任何测试。我需要做的就是将方法重命名为 test_*(): ..... :D
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2019-07-17
    • 2020-12-16
    • 2021-01-18
    • 2019-12-29
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多