2011-01-21 35 views
20

我的源文件位於src下,我的測試文件位於測試下。當我想運行一個測試文件時,比如說python myTest.py,我得到一個導入錯誤:「沒有名爲ASourceModule.py的模塊」。運行測試時Python導入src模塊

如何導入運行測試所需的所有模塊?

+1

[運行單元測試用典型的測試目錄結構]的可能的複製(http://stackoverflow.com/questions/1896918/running-unittest-with-典型測試目錄結構) – Asqiir 2017-03-05 08:12:39

回答

22

您需要到該目錄添加到路徑:

import sys 
sys.path.append('../src') 

如果你使用了很多也許把這個變成一個模塊。

+0

這不是OS不可知的。請參閱[答案](https://stackoverflow.com/a/34938623/1509695)在linux和Windows上都有相同的代碼工作。 – matanster 2018-01-30 07:06:14

0

最好的(最易管理的)解決方案似乎是使用virtualenv和setuptools/distribute安裝您的(src)軟件包的一個副本。這樣你的測試就可以在完全「安裝」的系統上執行。

12

如果您不想將源路徑添加到每個測試文件或更改您的PYTHONPATH,則可以使用nose來運行測試。

假設你的目錄結構是這樣的:

project 
    package 
     __init__.py 
     module.py 
    tests 
     __init__.py 
     test_module.py 

你應該導入模塊通常在test_module.py(例如from package import module)。然後通過在項目文件夾中運行nosetests來運行測試。您也可以通過執行nosetests tests/test_module.py來運行特定的測試。

目錄中的__init__.py是必要的,如果您想從其中運行測試。

您可以easy_installpip輕鬆安裝鼻子:

easy_install nose 

pip install nose 

鼻子伸出了很多單元測試更多的方式,更多地瞭解它,你可以查看他們的網站:https://nose.readthedocs.org/en/latest/

+0

+1「如果你想從裏面運行測試,tests目錄中的`__init __。py`是必須的。」 – 2018-02-14 15:13:15

3

在我的系統(Windows 10)上,我被要求做這樣的事情:

import sys 
import os 
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src") 

直接追加相對目錄sys.path沒有工作