在某些python结构中运行单元测试和覆盖
问题描述:
我有一些有趣的noob问题。在某些python结构中运行单元测试和覆盖
我尝试从命令行运行单元测试:
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 \测试\ python> python 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
也许我没有看到明显的东西。 我也尝试运行覆盖。 这种方法好吗(文件结构)?
答
你面临的直接问题是误解Python中的“本地代码”(我不确定是否有官方术语,所以我正在编写这个术语)以及如何导入它。
运行python src\test\python\test_power_estimator.py
时,sys.path
中的第一个元素被设置为包含test_power_estimator.py
脚本的目录,而不是当前目录。因此,“导入src.main.python.power_estimator作为电源”语句在目录src/test/python
中查找包src
,并且失败。
之一来解决这个问题的办法是设置PYTHONPATH环境变量设置为“H:\ PRO \ pyEstimator”
,但是推荐的方式来运行测试是使用测试运行的脚本。我建议使用nosetest。
此外,nosetest支持在运行测试时收集覆盖率数据。
此外,有一个名为“src”的python包似乎是个不错的主意。您应该将您的软件包重命名为您的项目。也许“估计”或“pyestimator”(小写,请)。
您好,感谢的答复,我做了什么,推出这个项目是:从src.main.python.power_estimator进口 进口SYS 进口OS sys.path.append(os.getcwd()) * 但我不喜欢那样。我会尝试PYTHONPATH。 “SRC”是否真的那么糟糕,而我的根包目录名称为“estimator”,里面我有所有项目文件,文档,构造等。 – bua 2009-11-14 12:20:27
只要在PyEstimator目录中直接有一个__init__.py文件,那就好了。问题是“src”是一个我不会放在我的模块命名空间根目录的名称。并且“src.main.python.power_estimator”是一个相对导入(脆弱,不好!),或者“src”是软件包的根名(不卫生)。 – ddaa 2009-11-15 00:37:09
再次感谢。我一定会听你的言论。你知道这个领域的一些实用方法在网络中有什么好的资源吗?我是基于这个:http://docs.python.org/tutorial/modules.html#packages ,正如我们所看到的,这并不是耗尽了良好的做法。 – bua 2009-11-15 08:25:26