导入单元测试的app engine app父目录

时间:2011-09-16 08:08:16

标签: python unit-testing google-app-engine

我确信这很容易解决,但我已经盯着它看了很长时间,以至于我正盯着解决方案。任何提示/提示/建议/解决方案都赞赏!

我正在尝试将一些单元测试添加到我的应用引擎应用中。我正在使用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中,然后我就可以在unittest文件中导入'util.lib'('test_lib.py') 。但是,当我运行testrunner.py时,我仍然收到错误“ImportError:没有名为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/

我在这里缺少什么建议?

1 个答案:

答案 0 :(得分:2)

您是否尝试使用绝对路径?

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