0

我一直在使用插件对我的应用程序进行单元nosetests测试with-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/1KR7UIHoQM

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

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

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

我怎样才能减轻这种情况,以便鼻子测试会在os.environ通话中表现出来?

4

2 回答 2

1

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

于 2012-09-13T16:31:54.647 回答
0

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

于 2012-09-16T12:44:46.580 回答