如何在 vscode 中为 python unittest 配置单元测试

der*_*rek 6 python-unittest visual-studio-code python-3.6 vscode-python

我正在使用 Python 3.6 和最新版本的 vscode。

我的文件夹结构:

/folder
    /src
        src.py
    /tests
        src_test.py
Run Code Online (Sandbox Code Playgroud)

src.py:

class Addition:
  def __init__(self, a, b):
    self.a = a
    self.b = b
  def run(self):
    return self.a + self.b
Run Code Online (Sandbox Code Playgroud)

src_test.py:

import unittest

from ..src.addition import Addition

class TestAddition(unittest.TestCase):
  def test_addition(self):
    inst = Addition(5, 10)
    res = inst.run()
    self.assertEqual(res, 16)

if( __name__ == "main"):
  unittest.main()
Run Code Online (Sandbox Code Playgroud)

这是我的项目settings.json:

{
  "python.testing.unittestArgs": [
    "-v",
    "-s",
    ".",
    "-p",
    "*_test.py"
  ],
  "python.testing.pytestEnabled": false,
  "python.testing.nosetestsEnabled": false,
  "python.testing.unittestEnabled": true
}
Run Code Online (Sandbox Code Playgroud)

然后在项目根文件夹下:

python3 -m unittest 测试/src_test.py

 File "/usr/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
ModuleNotFoundError: No module named 'tests.src_test'
Run Code Online (Sandbox Code Playgroud)

小智 5

您在测试文件夹下缺少一个__init__.py文件,并且模块的导入需要调整。

\n\n

允许__init__.pyPython 在文件夹结构中向上并到达模块src.py(在 src 下另一个__init__.py会很好,但没有必要使 vscode 测试工作)。

\n\n

这是一个工作文件夹结构:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src_test.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,更改 src.py 中的行:

\n\n
    \n
  • (老的)from ..src.addition import Addition
  • \n
  • (新的)from src.src import Addition
  • \n
\n