我正在使用Google App Engine的testbed
框架编写带有模拟对象的测试用例,文档可以在这里找到。我已经通过使用模拟数据库(Testbed.init_datastore_v3_stub
)成功地进行了数据存储测试,这使得我的测试用例可以在一个快速而新鲜的数据库上运行,每个测试用例都可以重新初始化。现在我想要测试依赖于当前用户的功能。
还有另一个名为Testbed.init_user_stub
的testbed服务,我可以激活这个服务来获取“虚假”的用户服务。不幸的是,似乎没有任何关于它的文档。我正在像这样激活和使用它:
import unittest
from google.appengine.ext import testbed
from google.appengine.api import users
class MyTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_user_stub()
def testUser(self):
u = users.get_current_user()
self.assertNotEqual(u, None)
问题在于我无法找到任何方法告诉“假”的用户服务去认证一个“假”的用户。因此,在运行测试时,我(可以预料地)得到了AssertionError: None == None
意思是虚假用户服务告诉我的应用程序当前用户未登录。我该如何告诉虚假用户服务假装某个用户已登录?理想情况下,我希望能够指定虚假用户的昵称、电子邮件、用户ID以及他们是否是管理员。这似乎是一个非常普遍的需求(因为需要测试应用程序在a) 没有用户登录,b) 用户已登录和c) 管理员已登录的情况下的行为方式),但搜索“init_user_stub”几乎什么都没有返回。注意:如果您要测试上面的程序,则需要将此添加到顶部:
import sys
sys.path.append('/PATH/TO/APPENGINE/SDK')
import dev_appserver
dev_appserver.fix_sys_path()
并将此添加到底部:
if __name__ == '__main__':
unittest.main()
testbed.setup_env()
而不是直接使用os.environ
。 - ryan