【问题标题】:vscode python fail to discover unit tests recursivelyvscode python无法递归地发现单元测试
【发布时间】:2018-08-04 20:08:45
【问题描述】:

我有一个像这样的简单 python 单元测试...

项目/ 计算/ 计算.py calc_test.py

calc.py 有两个函数 sum() 和 diff(),calc_test.py 有两个测试用例来测试这些函数,使用 python 内置的 unittest 框架。

我使用 Visual Studio 代码作为我的编辑器。如果我将顶级工作区设置为“项目”目录,那么 VS Code 将无法发现任何测试。但是,如果重新打开“calc”目录下的 VS Code,那么它会识别测试并显示漂亮的叠加层(“运行测试”、“调试测试”等)。

如果我将单元测试移到上一层(到 proj/),那么它也可以工作。我的回忆是参数“-s”和目录“。”应该从运行“python -m unittest <..>”命令的顶级目录递归查找“test.py”文件。

"python.unitTest.unittestEnabled": true,
"python.unitTest.unittestArgs": [
    "-v",
    "-s",
    ".",
    "-p",
    "*test*.py"
],

从 proj/ 我手动运行“python -m unittest discover -s . -p "test.py" -v,发现测试并运行没有任何问题。我想 VS Code 应该也在内部运行类似的命令,但这里缺少一些东西。

这使得 VS Code 看起来无法从顶层目录递归查找测试。我正要在 VS Code 的 Python 扩展 (https://github.com/Microsoft/vscode-python/issues/new) 上打开一个问题,但想根据贡献指南先在这里查看。

【问题讨论】:

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


    【解决方案1】:

    解决方法是在每个测试用例所在的文件夹中添加__init__.py

    来自Python testing in Visual Studio Code

    提示:有时无法发现放置在子文件夹中的测试,因为 无法导入此类测试文件。要使它们可导入,请创建一个 该文件夹中名为 __init__.py 的空文件。

    【讨论】:

    • __ 去哪儿了?我的意思是添加“__init__.py”文件。
    • 请不要在评论部分添加相关信息,最好编辑您的答案以包含所有内容
    • 这对我有用。谢谢。
    • 在GNU或类Unix操作系统中,尝试touch tests/__init__.py快速制作空文件
    【解决方案2】:

    我将此作为答案发布,因为我很沮丧我无法以我当前的信誉级别发布 cmets,但这并不能通过将 __init__.py 添加到您正在测试的文件夹中来解决。我会继续尝试回答这个问题,因为它现在是一个答案。

    当您在大型项目的文件夹中测试模块时,只需使用 file 菜单打开文件夹,将实际文件夹作为 VSC 视图打开,然后在根目录(或向上)中执行 Python Test Configuration到一个目录深处),它会生成 init.py 文件(这显然不是 VSC 无法找到嵌套测试的原因)。

    这解决了问题(尽管不允许您保持整个项目处于打开状态),并且还简化了您的文件树以处理手头的特定任务。

    我尝试了几种方法,包括各种命令,但这似乎是解决这种奇怪行为的一个相当优雅的解决方案。

    是的,我承认这个问题很古老,但显然仍然与最新版本的 VSC 相关。

    【讨论】:

      【解决方案3】:

      如果您在 VS Code 中打开 project,那么您希望将 -s 设置为 ./calc 以获取您的测试(这实际上与 VS Code 无关,完全由 unittest 包驱动) .

      【讨论】:

      • 如何设置-s?在这种情况下尚不清楚。谢谢!
      • @josh 查看他们提供的 OP 配置,您会看到他们将其设置为 "."。这个值是需要改变的。
      猜你喜欢
      • 2015-06-25
      • 2018-06-06
      • 2020-08-29
      • 1970-01-01
      • 2023-03-06
      • 2011-12-05
      • 2011-03-18
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多