在请求中模拟字段

时间:2017-07-13 16:15:52

标签: python django mocking

有两个框架 - Django和Flask。 Django使用REST运行项目,而Flask运行Orchestration Layer。

现在有一个测试,它应该检查一个CRUD方法:

@mock.patch('requests.post')
def test_create(self, request_mock,):
    request_mock.return_value = self.response_generator.create()
    response = self.client.post(url_for('foo.list', account='bar'),
                                content_type='application/json',
                                data=json.dumps({
                                    "name": "Foo",
                                    "type": "baz"
                                }))
    self.assertEqual(response.status_code, 201)

nametype是必填字段。 name只是一个字符串。但type是该类型的URL(在REST中),因此当传递baz时,它使用魔法连接到REST并检索数据。

问题是,在运行测试时,使用REST的Django处于脱机状态,而测试仍然尝试连接到它,导致超时错误。

  带有ConnectionError的

:HTTPConnectionPool(host = '10 .10.10.10',port = 8000):使用url超出了最大重试次数:/ rest / accounts / bar / baz /(由NewConnectionError引起(':无法建立新连接: [Errno 111]连接拒绝',))

问题:现在如何模拟type字段,因此它不会调用脱机服务器?

1 个答案:

答案 0 :(得分:1)

有用的单元测试的第一个条件是模拟这些测试可能具有的外部依赖性。就像您的情况一样,无论您要测试的服务是否可用,您都应该能够运行它。

虽然我不知道SELECT * FROM post WHERE kategori="Batch" ORDER BY count DESC LIMIT 4 代表什么(因为你没有包含它的代码),我猜你发布的错误响应,你创建了一个urllib客户端。

但是,如果您打算在Django项目中测试视图,则应该使用django测试客户端作为Django docs建议。根据您的需要,您还应该考虑RequestFactory

因此,不需要urllib客户端,因为框架为您提供了所需的单元测试工具。

也有类似的questions