【问题标题】:How to set up VS Code for imported modules to work in both debug and test?如何设置导入的模块以在调试和测试中工作
【发布时间】:2022-01-06 09:59:40
【问题描述】:

我正在尝试在 VSC 中设置一个工作区,我希望能够在 venv 中运行它。

root
- app
-/- modules
-/-/- __init__.py
-/-/- myModule.py
-/-/- myModule2.py
-/- __init__.py
-/- myApp.py
- test
-/- myTest.py
- venv

myApp.py

import random
import numpy as np

import modules.myModule as mm

x = mm.main()

myModule.py

from app.modules import myModule2

def main():
    x = myModule2()
    return x

我遇到的问题是我自己的模块可以在调试或测试(作为单元测试)中运行,但相同的设置不能同时运行。当我有from app.modules import myModule2 时,我可以运行测试但不能调试,当我有from modules import myModule2 时,我可以运行调试但不能测试。

我的启动.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }
    ]
}

我的设置.json

{
    "python.testing.unittestArgs": [
        "-v",
        "-s",
        "./test",
        "-p",
        "*test.py"
    ],
    "python.testing.pytestEnabled": false,
    "python.testing.unittestEnabled": true,
    "python.analysis.extraPaths": [
        "./app"
    ]
}

如何设置我的工作区以同时运行两者?

编辑:

import unittest
from app.modules.myModule import main

class Test_Foo(unittest.TestCase):
    def test_bar(self):
        x = main()
        assertEqual(x, 'foobar', 'not equal')


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

添加了测试。

我对文件 myApp.py 运行调试,并从测试资源管理器运行测试。

EDIT2:

我在运行调试时遇到的错误是

Exception has occurred: ModuleNotFoundError
No module named 'app'

异常在from app.modules import myModule2行中名为myModule.py的文件中被捕获

【问题讨论】:

  • 你在调试中运行得如何?
  • 我正在使用侧边栏中的 VSC 调试。调试文件是launch.json
  • from . import myModule2 ???
  • 显示 myTest.py.
  • "program": "${file}","module": "app.myApp", 适合您的用例吗?

标签: python unit-testing debugging visual-studio-code


【解决方案1】:

通过执行python test/myTest.py 运行测试的问题是app 文件夹不在python 路径上。 unittest 模块,如果通过其 CLI 启动,如果相应地设置了文件夹结构,则会自动处理此问题。详细信息可以看这个post

长话短说:

  1. 将一个空的 __init__.py 文件添加到您的 /test 文件夹中
  2. 运行python -m unittest test/myTest.py

要运行包含在多个名为 test/*test.py 的文件中的所有测试,请使用带有匹配参数的 unittest 包的 discover 选项:

python -m unittest discover -s "test/" -p "*test.py"

我建立了一个与您描述的文件匹配的VSC项目,添加了文件test/__init__.py并创建了一个虚拟环境python venv。

上面运行测试的选项,我可以通过在launch.json文件中添加如下配置来实现:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: run single test",
            "type": "python",
            "request": "launch",
            "module": "unittest",
            "args": [
                "test/my_test.py"
            ]
        },
        {
            "name": "Python: run all tests",
            "type": "python",
            "request": "launch",
            "module": "unittest",
            "args": [
                "discover",
                "-s",
                "./test",
                "-p",
                "*test.py"
            ]
        }
    ]
}

在启用调试的情况下工作。我没有创建setting.json文件,所以python.unittest设置为默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2021-07-15
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多