【问题标题】:App Engine Unit Testing with nosetests gae issue带有nosetests gae问题的App Engine单元测试
【发布时间】:2012-09-13 03:14:11
【问题描述】:

我一直在使用 nosetestswith-gae 插件对我的应用程序进行单元测试。

但是,我已经用装饰器包装了我的许多 get/post 处理程序,这些装饰器检查数据存储区中的某些项目并将它们放入 os.environ 以供处理程序使用。

所以我可能有一个装饰器,它可以做这样的事情:

os.environ["user"] = User()

其中 User() 是一个 ndb.Model 实例。但是,当我运行鼻子测试时,这总是会失败,并且会给我一个错误,例如:

os.environ["user"] = user
File "C:\Python27\lib\os.py", line 420, in __setitem__
   putenv(key, item)
TypeError: must be string, not User

我在这里有一个类似的帖子:

https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/1KR7UIPHoQM

有人告诉我 App Engine 实际上并没有在 os 模块中调用 getenv/putenv。

该错误是因为在 Python 的普通 os 模块中,除了字符串之外,您无法将任何内容插入到 os.environ 中,而 nosetests 显然正在使用常规 Python os 模块。

但是,App Engine 使用 request_environment.py 来处理 os.environ 调用。

我怎样才能缓解这种情况,以便鼻子测试将在 os.environ 调用中运行?

【问题讨论】:

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


    【解决方案1】:

    另一种方法是使用 db 存根 (https://developers.google.com/appengine/docs/python/tools/localunittesting) 在测试之前将所需的实体放在上面。

    【讨论】:

      【解决方案2】:

      我为其他可能遇到此问题的人找到了解决方案:在运行测试之前,请在 google.appengine.api.runtime 中调用 PatchOsEnviron

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        相关资源
        最近更新 更多