2009-11-14 119 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