我相信這很容易解決,但我一直盯着它很長時間以至於我直盯着解決方案。任何提示/提示/建議/解決方案表示讚賞!爲unittest導入應用程序引擎應用程序的父目錄
我想添加一些unittests到我的應用程序引擎應用程序。我正在使用http://code.google.com/appengine/docs/python/tools/localunittesting.html(頁面底部)中的testrunner.py示例。如果我將unittest文件(名爲'test_lib.py')放到應用程序的根目錄(myapp)中,這可以正常工作,但是我想將測試移動到應用程序內的單獨子目錄(名爲'tests')。現在我需要從應用程序導入一些模塊,但由於unittest文件的工作目錄現在更深一層,因此它不會從我的應用程序引擎應用程序中看到實際的模塊。
我嘗試添加一個__ init__.py的測試和下面的代碼添加到它:
import os
import sys
sys.path.append(os.path.dirname(os.getcwd()))
我希望這會發現當前的工作目錄,進入一個級別,這增加了sys.path,我可以在單元測試文件('test_lib.py')中導入'util.lib'。然而,當我運行testrunner.py時,我仍然得到錯誤「ImportError:No module name util.lib」 - >我試圖在根'myapp'內的名爲util的子目錄中導入一個名爲lib的模塊。我的目錄結構如下:
testrunner.py
|- myapp
|- __init__.py
|- util
|- __init__.py
|- lib.py
|- tests
|- __init__.py ## this file has the import mentioned above.
|- test_lib.py
我也嘗試添加該應用建立的TestRunner根的進口,但它返回相同的錯誤。
def main(sdk_path, test_path):
sys.path.append(os.path.dirname(test_path)) ## This line I added to the testrunner.
sys.path.insert(0, sdk_path)
import dev_appserver
dev_appserver.fix_sys_path()
suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2).run(suite)
我打電話來使用以下命令測試:
./testrunner.py ~/sdk/google_appengine/ myapp/tests/
任何建議什麼,我在這裏失蹤?
添加此向testrunner.py主功能的工作:sys.path.append(os.path.abspath則(os.path.dirname(os.path.dirname(test_path)))) – reallife
您最初的嘗試不起作用,因爲'os.getcwd()'是您正在運行的目錄 - myapp的父目錄。您可以避免使用'os.path.dirname(__ file __)'將路徑編碼到您的應用程序中。 –