2009-11-14 99 views
1

我有一些有趣的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 

也许我没有看到明显的东西。 我也尝试运行覆盖。 这种方法好吗(文件结构)?

回答

1

你面临的直接问题是误解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”(小写,请)。

+0

您好,感谢的答复,我做了什么,推出这个项目是:从src.main.python.power_estimator进口 进口SYS 进口OS sys.path.append(os.getcwd()) * 但我不喜欢那样。我会尝试PYTHONPATH。 “SRC”是否真的那么糟糕,而我的根包目录名称为“estimator”,里面我有所有项目文件,文档,构造等。 – bua 2009-11-14 12:20:27

+0

只要在PyEstimator目录中直接有一个__init__.py文件,那就好了。问题是“src”是一个我不会放在我的模块命名空间根目录的名称。并且“src.main.python.power_estimator”是一个相对导入(脆弱,不好!),或者“src”是软件包的根名(不卫生)。 – ddaa 2009-11-15 00:37:09

+0

再次感谢。我一定会听你的言论。你知道这个领域的一些实用方法在网络中有什么好的资源吗?我是基于这个:http://docs.python.org/tutorial/modules.html#packages ,正如我们所看到的,这并不是耗尽了良好的做法。 – bua 2009-11-15 08:25:26