2011-09-16 83 views
0

我相信這很容易解決,但我一直盯着它很長時間以至於我直盯着解決方案。任何提示/提示/建議/解決方案表示讚賞!爲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/ 

任何建議什麼,我在這裏失蹤?

+0

添加此向testrunner.py主功能的工作:sys.path.append(os.path.abspath則(os.path.dirname(os.path.dirname(test_path)))) – reallife

+0

您最初的嘗試不起作用,因爲'os.getcwd()'是您正在運行的目錄 - myapp的父目錄。您可以避免使用'os.path.dirname(__ file __)'將路徑編碼到您的應用程序中。 –

回答

2

您是否嘗試過使用絕對路徑?

sys.path.append(os.path.abspath(os.path.dirname(test_path))) 
+0

不幸的是,這也沒有奏效,但你正在爲testrunner.py行提出一個好的觀點。感謝你一直在思考:) – reallife

+0

但是,添加到testrunner.py代碼工作! sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(test_path))))謝謝! – reallife

相關問題