2016-05-26 25 views
3

我在將任何東西導入到我打算使用py.test運行的測試文件中時遇到問題。從兄弟目錄導入模塊以便與py.test一起使用

我有一個項目的結構如下:

/ProjectName 
| 
|-- /Title 
| |-- file1.py 
| |-- file2.py 
| |-- file3.py 
| |-- __init__.py 
| 
|-- /test 
| |-- test_file1.py 

我一直沒能得到與pytest工作test_file1.py文件中任何的import語句,所以我目前只是嘗試使用file_1.py聲明的變量並在test_file1.py運行時打印出來。

file1.py包含:

file1_variable = "Hello" 

test_file1.py包含:

import sys 
import os 
sys.path.append(os.path.abspath('../Title')) 
import file1 

def test_something(): 
    assert file1.file1_variable == "Hello" 

print(file1.file1_variable) 

從我的測試文件中的import語句從https://stackoverflow.com/a/10272919/5477580其中工程通過編輯PYTHONPATH變量取。這使我可以運行test_file1.py腳本併成功執行print聲明。

然而,試圖從/ProjectName目錄運行py.test給了我一個錯誤說ImportError: No module named 'file1'

是否有某種方式,我可以構建更好的東西,這樣pytest將是可能的嗎?我需要爲我的__init__.py文件添加一些內容嗎?

回答

2

不,你不需要添加任何東西到__init__.py。這個文件告訴python把父目錄當作模塊,可以導入爲described here。 只需將它添加到您的標題目錄並導入它像

from ..Tiltle.file import file1_variable 

在這裏,我們在目錄中移動上述1個層次就像cd ..

..是從測試目錄達到標題包。如果您需要從項目名目錄中運行你的文件,你將不得不做

from Tiltle.file import file1_variable 
+0

這是工作,非常感謝你。我想我只是曲解了分層導入語句的結構。但是,如果file1.py中有import語句,似乎pytest會再次遇到錯誤。例如,說file1.py從file2.py中導入一些函數,運行pytest然後會說沒有名爲file2.py的模塊。我是否必須在測試文件中明確聲明每一個? – Shinkawa91