我正在为这个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()
由于
答案 0 :(得分:0)
我在类似的情况下使用过mock call_args
。你可以这样做:
request = p_parse_from_queue.call_args[0][0]
self.assertEqual(request.url, "foo")
self.assertEqual(request.*, *)
[0][0]
给出第一个传递的参数,假设您使用的是有序参数而不是关键字参数。
然后,您可以继续检查request
对象的其他相关属性,以确保其行为符合预期。