我使用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
来调查鼻子测试?
答案 0 :(得分:1)
另一种方法可能是使用db存根(https://developers.google.com/appengine/docs/python/tools/localunittesting)在测试之前将所需的实体放在其上。
答案 1 :(得分:0)
我找到了可能遇到此问题的其他人的解决方案:在运行测试之前在PatchOsEnviron
中调用google.appengine.api.runtime
。