应用引擎单元测试与nosetests gae问题

时间:2012-09-13 03:14:11

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

我使用nosetests插件使用with-gae对我的应用进行单元测试。

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

所以我可能会有一个类似的装饰器:

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

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

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来调查鼻子测试?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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