gpt4 book ai didi

python - 单元测试时如何获得实际的 Pyramid 请求

转载 作者:太空狗 更新时间:2023-10-30 00:28:26 25 4
gpt4 key购买 nike

我有一个 Pyramid 应用程序,我仍在努力学习。我应该为它编写单元测试,但我不知道如何构建请求。

我看到 Pyramid 有一个带有 DummyRequest 的测试模块,但这是空白的,显然如果我将它传递到 View 中,它将失败,因为它没有填充请求将具有的属性运行。

所以问题是,如何在测试时传递一个看起来像运行时请求的请求?

最佳答案

无论何时进行单元测试(这与功能测试不同),都要意识到您正在测试一个小“单元”。该单元(在本例中为您的 View )不需要“真实”请求,也不需要完整的工作系统。该 View 对自称为“请求”的对象可能具有的内容有一定的期望,但仅此而已,它当然不需要真正请求中可用的所有内容。这就是模拟或虚拟对象发挥作用的地方。你想测试你的 View ,所以你可以将一些东西传递到你的 View 中,它需要检查它是否正在做工作所需的属性。假设您具有以下配置:

def main():
config = Configurator()
config.add_route('user', '/users/{uid}')
return config.make_wsgi_app()

@view_config(route_name='user', renderer='user_template.mako')
def user_view(request):
uid = request.matchdict['uid']
user = find_user(request, uid)
if user is None:
raise HTTPNotFound
return {'user': user}

def find_user(request, uid):
return request.db.query(User).filter_by(id=uid).first()

太好了,这是一个真实的 View ,您会注意到它只要求请求具有 2 个属性,matchdictdb。好吧,我们可以做到:

class Test_user_view(unittest.TestCase):
def test_it(self):
req = DummyRequest()
req.db = DummyDB()
req.matchdict = {'uid': '3'}
result = user_view(req)
self.assertEqual(result['user'].id, 3)

现在我们没有在这里解决的一件事是 DummyDB 的实现,但更好的方法可能是模拟 find_user 以返回一个虚拟值。这使测试变得简单并专注于 View 本身,而不会陷入与数据库对话的困境。那是一个单独的测试。

此处的其他答案更全面地涵盖了功能测试,您一定要看看使用 WebTest 来帮助确保您的整个应用程序按预期工作,但这不是单元测试的范围。

关于python - 单元测试时如何获得实际的 Pyramid 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com