我正在编写一些单元测试,我想在 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 中运行单元测试?显然我可以在调试模式下运行它们,但随后我必须删除所有断点。
我的方法是将 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