我有一个Flask应用程序,该应用程序公开了一个需要发布值的方法。在此端点中,我获取请求数据并创建一个发送到Kafka的事件。根据请求值包含的内容,事件是不同的。我想编写一系列测试,以验证创建事件的方法是否按预期工作。没有大量细节,这是网关资源的基本结构。
class Gateway(Resource):
def build_event(self, request):
event = {
"key": uuid4(),
"source_ip": request.remote_addr,
"payload_checksum": = haslib.md5(request.data).hexdigest(),
...
}
if request.data['some-key']:
event["key-specific-value"] = "foo"
else:
event["key-specific-value"] = "bar"
def post(self):
event = self.build_event(request)
kafka_producer.send(event)
我想编写一些测试以允许我调用post方法,并验证从build_event返回的事件是否正确。 如何在单元测试中检查从build_event返回的结构的值?
答案 0 :(得分:0)
尽量不要在一个测试用例中测试多种方法。为post
编写一个模拟self.build_event
和kafka_producer.send
的测试。然后,编写另一个仅调用build_event
的测试用例,并检查其返回值。
要回答您的原始问题,您可以创建一个模拟对象,并将其作为您的请求参数传入,如下所示:
def test_build_event(self):
mock_request = mock.Mock(remote_addr='some remote address', data={'some-key': False})
gateway = Gateway()
event_return_val = gateway.build_event(mock_request)
self.assertEqual(event_return_val['key-specific-value'], 'bar')
self.assertTrue('key' in event_return_val)
您会变得更加复杂,并且mock.patch
和uuid4()
的调用也是如此。这样一来,您就可以与返回的hashlib.md5()
和修补的返回值中的确切值进行比较。首先,您可以检查密钥是否像上面的情况一样存在。