为什么在VS Code中使用Python测试获得“未发现测试”?

时间:2019-01-19 22:24:56

标签: python python-unittest

这是我的前几行代码,但是我已经编码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

1 个答案:

答案 0 :(得分: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中引用“魔术”变量
  • 不要引用您在每个测试中要测试的内容,因为套件本身已经使用名称进行了引用
  • 您的班级名称不应包含下划线