单元测试可以从命令行工作,但不能从 pycharm 工作

问题描述 投票:0回答:1

我正在编写一些单元测试,我想在 pycharm 中调试它们。调试工作正常。但是,如果我想在调试模式之外运行测试,我会得到:

C:\Users\my_name\Miniconda3\envs\feature-extraction\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py" --path D:/projects/A2TD/feature_extraction/tests/reconstruction/test_misc.py

Testing started at 5:04 PM ...

Ran 1 test in 0.002s
Launching unittests with arguments python -m unittest D:/projects/A2TD/feature_extraction/tests/reconstruction/test_misc.py in D:/

FAILED (errors=1)

...
...
    module = __import__(module_name)
ModuleNotFoundError: No module named 'test_misc'

但是,我可以让他们在命令行中运行测试:

"C:\Users\my_name\Miniconda3\envs\feature-extraction\python.exe" "C:\Program Files\JetBrains\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py" --path D:/projects/A2TD/feature_extraction/tests/reconstruction/test_misc.py

或者这个:

python -m unittest D:/projects/A2TD/feature_extraction/tests/reconstruction/test_misc.py

您会注意到上述两个命令都是直接从发生错误的 PyCharm 运行输出中复制并粘贴的。

这些命令在从顶级项目中的任何位置运行时都有效。

我使用带有默认运行配置的单元测试,这些配置在第一次运行时自动填充,例如:

具有标准项目结构,例如:

project_folder
|
|- top_level_package/
|   |
|   |- __init__.py
|   |- sub_packages/ (containing modules)
|   
|-tests/
    |- __init__.py
    |- package_to_test/
         |
         |- __init__.py
         |- test_module1.py
         |- test_module2.py

问题:

如何在调试模式之外在 PyCharm 中运行单元测试?显然我可以在调试模式下运行它们,但随后我必须删除所有断点。

python pycharm python-unittest
1个回答
0
投票

我的方法是将 package_to_test 重命名为 package_to_test_t 之后,具有默认参数的 pycharm 开始解析包名称。

要在命令行上运行测试,我通常在导入包之前添加单元测试类(需要检查 os.path.dirname() 调用的数量,具体取决于测试的目录级别。

script_directory = os.path.dirname(os.path.abspath(__file__))
projroot_directory = os.path.dirname(os.path.dirname(script_directory))
sys.path.extend([os.path.join(projroot_directory, 'top_level_package')])


project_folder
|
|- top_level_package/
|   |
|   |- __init__.py
|   |- sub_packages/ (containing modules)
|   
|-tests/
    |- __init__.py
    |- package_to_test_t/
         |
         |- __init__.py
         |- test_module1.py
         |- test_module2.py
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.