2017-07-13 73 views
0

有2個框架 - 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脫機時,而測試仍然嘗試連接到它導致超時錯誤。

with ConnectionError: HTTPConnectionPool(host='10.10.10.10', port=8000): Max retries exceeded with url: /rest/accounts/bar/baz/ (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))


問題:現在一個人如何模擬只是type領域,所以它不叫脫機服務器?

回答

1

有用的單元測試的第一個條件是嘲笑這些測試可能具有的外部依賴性。就像您的情況一樣,無論您嘗試測試的服務的可用性如何,您都應該能夠運行它。

雖然我不知道self.client是什麼意思(因爲你沒有包含它的代碼),我猜你發佈的錯誤響應是你創建了一個urllib客戶端。然而,如果你的目的是在你的Django項目中測試一個視圖,你應該使用django測試客戶端作爲Django docs建議。根據您的需要,您還應該考慮RequestFactory

因此,由於框架爲您提供了所需的單元測試工具,因此不需要擁有urllib客戶端。

也有類似的questions