我正在为此 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
对象的其他相关属性,以确保其行为符合预期。