2014-01-10 82 views
2

我正在研究一個小的Python包,並且正在爲它編寫單元測試。我有我的包結構相當典型的Python的方式佈局:在Python包的unittest測試套件中包含額外的文件

mypackage/ 
    mymodule.py 
    test/ 
     test_mymodule.py 

這個特殊的模塊被設計來讀取文件的內容,做一件事與所述內容,然後返回一個值。爲了測試這個,我想在我的測試套件中包含一些輸入文件。

我想我可以組織他們是這樣的:

mypackage/ 
    mymodule.py 
    test/ 
     test_mymodule.py 
     test_input01.txt 
     test_input02.txt 

然後找到文件使用__file__全局變量來讀取。

我的問題是:這是一個合理的Pythonic組織事物的方式嗎?我擔心以這種方式猜測路徑在任何環境下都不可靠(例如,如果軟件包是通過點等安裝的話)。

具體來說,我正在尋找1)支持這種(或其他)方法的一些官方文檔,或2)使用這種(或其他)方法的公認的現有項目。

+1

使用'__file__'定位當前目錄路徑和測試數據所在的位置幾乎可以。作爲一個例子,請參見[pep8](https://github.com/jcrocholl/pep8)github項目,特別要注意如何在'testsuite'包中安裝測試 - '* .py'文件,其名稱如'E10 .py','E11.py'在測試中用作目標文件。希望有所幫助。 – alecxe

+0

你是非常正確的 - 他們確實使用這種確切的技術。如果它足以滿足Python風格指南,那對我來說已經足夠了。 :)添加作爲答案,我會接受它。謝謝! – CmdrMoozy

回答

2

使用__file__來定位當前目錄路徑和測試數據所在的位置幾乎可以。

舉個例子,看看pep8 github上項目,特別是要注意如何測試被組織在testsuite包 - 與像E10.py名有*.py文件,E11.py被用作試驗的目標文件。

此外,pylint使用類似的方法(基於__file__),但測試數據組織在subpackages

此外,見:

希望有所幫助。

+1

特別是,可以使用'__file__'在這裏查看測試目錄:https://github.com/jcrocholl/pep8/blob/master/testsuite/support.py,然後使用該常量加載測試輸入這裏的文件:https://github.com/jcrocholl/pep8/blob/master/testsuite/test_api.py。看起來這是實現這一點的可靠方法。 :) – CmdrMoozy