在某些python结构中运行单元测试和覆盖

时间:2009-11-14 11:37:38

标签: python unit-testing code-coverage python-coverage

我有一些有趣的菜鸟问题。

我尝试从命令行运行单元测试:

H:\PRO\pyEstimator>python src\test\python\test_power_estimator.py
Traceback (most recent call last):
  File "src\test\python\test_power_estimator.py", line 2, in <module>
    import src.main.python.power_estimator as power
ImportError: No module named src.main.python.power_estimator

当我尝试在所需的文件夹中运行它时会发生这种情况:

  

H:\ PRO \ pyEstimator \ SRC \测试\蟒&GT;蟒   test_power_estimator.py

我的文件夹结构如下所示。

├───src
│   │   __init__.py
│   │   __init__.pyc
│   │
│   ├───main
│   │   │   __init__.py
│   │   │   __init__.pyc
│   │   │
│   │   └───python
│   │       │   __init__.py
│   │       │   power_estimator.py
│   │       │   __init__.pyc
│   │       │   power_estimator.pyc
│   │       │
│   │       └───GUI
│   │               __init__.py
│   │
│   └───test
│       │   __init__.py
│       │
│       └───python
│               test_power_estimator.py
│               __init__.py
│               covrunner.bat
│               .coverage
│
└───doc

也许我没有看到明显的东西。 我也试着报道。 这种方法是否合适(文件结构)?

1 个答案:

答案 0 :(得分:1)

你面临的直接问题是误解了Python中的“本地代码”(我不确定是否有官方术语,所以我正在制作这个术语)以及如何导入它。

运行python src\test\python\test_power_estimator.py时,sys.path中的第一个元素设置为包含test_power_estimator.py脚本的目录,而不是当前目录。因此,语句“import src.main.python.power_estimator as power”会在目录src中查找包src/test/python,但这会失败。

解决此问题的一种方法是将PYTHONPATH环境变量设置为“H:\ PRO \ pyEstimator”

但推荐的运行测试方法是使用测试运行器脚本。我建议使用nosetest

此外,nosetest支持在运行测试时收集覆盖率数据。

此外,有一个名为“src”的python包听起来是个坏主意。您应该将包重命名为您的项目。也许是“estimator”或“pyestimator”(请小写)。