使用模拟和修补程序对 WebApp2 进行单元测试时请求问题



我正在为此 webapp2 处理程序构建单元测试(为 GAE 构建)

    class PushNotificationHandler(webapp2.RequestHandler):
        def post(self):
            UserNotification.parse_from_queue(self.request)
            return
    app = webapp2.WSGIApplication([
        (r'/push/notification', PushNotificationHandler),
    ], debug=True)

一项测试是

    @patch.object(UserNotification, 'parse_from_queue')
    def test_post_webapp(self, p_parse_from_queue):
        response = webtest.TestApp(app).post('/push/notification')
        eq_(response.status_int, 200)
        p_parse_from_queue.assert_called_once_with(response.request)

HTTP 回复正常,但模拟断言失败:

    Expected call: parse_from_queue(<TestRequest at 0x105a89850 POST http://localhost/push/notification>)
    Actual call: parse_from_queue(<Request at 0x105a89950 POST http://localhost/push/notification>)

我不明白为什么请求不正确(看起来像一个深副本)。单元测试有什么问题,或者webapp2处理请求的方式。在第二种情况下,有没有办法测试它,而无需创建单独的测试来测试PushNotificationHandler.post()

谢谢

我在类似的情况下使用了模拟call_args。 你可以做这样的事情:

request = p_parse_from_queue.call_args[0][0]
self.assertEqual(request.url, "foo")
self.assertEqual(request.*, *)

[0][0]为您提供第一个传递的参数,假设您使用的是有序参数而不是关键字参数。

然后,您可以继续检查request对象的其他相关属性,以确保其行为符合预期。

相关内容

  • 没有找到相关文章

最新更新