Flask單元測試Mock簡單使用

  在單元測試中,需要測試一個單獨模塊的功能運行情況,這使得我們不希望它被其它模塊的功能所影響

  舉例來說,想測試一個get請求返回的數據是否正確,但是在處理get請求的方法中,數據來源於其他模塊函數。在測試中,我們希望測試get請求時,只測試處理該請求的方法,而不關心獲取數據的方法,這時就需要用mock來模擬獲得數據的方法

  這裏只介紹最簡單的一種模擬,即模擬一個方法

要測試的函數

  具體情況不同,寫的代碼不是完整代碼

def get():
	...
	data = model.User.getUserName()
	...
	return ...

單元測試

  導入unittest 模塊

import unittest
from unittest import TestCase
from unittest.mock import patch
from app import app

class UnitTest(TestCase):
    def setUp(self) -> None:
        # 這個app是你的flask應用,也要導入
        app.testing = True
        # 啓動測試用的客戶端發送請求
        self.client = app.test_client()
    
    # 用裝飾器添加要模擬的方法名
    @patch('model.User.getUserName')
    # 在參數中添加模擬前面方法的Mock對象,(實際是MagicMock對象,Mock的子類)
    def test_UserLogin200(self, mock_getpwd):
        # 設置該模擬方法的返回值
        mock_getpwd.return_value = 'admin'
        # 用客戶端發送用要測試模塊處理的請求
        rv = self.client.get('/username')
        # 測試返回數據是否正確
        assert b'admin' in rv.data 

  在這個測試中,用 Mock 模擬了 model.User.getUserName 方法,在測試get方法時,不再依賴於 model.User.getUserName 的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章