Why am I getting “No tests discovered” with Python tests in VS Code?

社会主义新天地 提交于 2020-06-16 17:31:23

问题


This is my first few lines of code but I've coded for 20 years so I quickly wanted to get unit testing running.

I am using

  • Windows 10
  • VS Code 1.30.2 from 7th January, 2019.
  • Python 3.7.2
  • Python Extension ms-python.python 2018.12.1

Here's the contents of the folder I'm in.

    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

I am not in a "venv", as far as I know.

This is the contents of 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()

The __init__.py is empty, I added it to see if it helps, and messing.py contains like a 8 lines of some code from a book.

When I try to discover the tests in VS Code I get.

No tests discovered, please check the configuration settings for the tests. Source: Python (Extension)

More interestingly, running test discovery via the Python command line looks like this.

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:


As it says in the documentation for the unittest module, Your test method names need to begin with test.

tests are defined with methods whose names start with the letters test. This naming convention informs the test runner about which methods represent tests.

For example

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...

Note that none of these actually test your messing.py functionality. In order to do that you need to import messing, call functions on it, and assert the values those functions return are expected.

Finally, a few conventions you should follow:

  • Use short, simple test names
  • Avoid using double underscores since those often refer to "magic" variables in Python
  • Don't refer to what you're testing in every test since the suite itself already refers to it by name
  • Your class names should not contain underscores


来源:https://stackoverflow.com/questions/54271900/why-am-i-getting-no-tests-discovered-with-python-tests-in-vs-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!