[英]Python: mock imported module method
我必須測試是否調用了pyautogui.click()方法。 這是我的Player.py文件:
# Player.py
import pyautogui
class Player:
def play():
pyautogui.click(100, 100)
這是我的測試文件:
# Test_Player.py
import unittest
from Player import Player
class Test_Player(unittest.TestCase):
def test_play(self):
player = Player()
player.play()
# assert pyautogui.click is called once
我嘗試使用pyautogui.click = MagicMock()
以及其他許多方法,但是我真的找不到如何斷言pyautogui.click()被調用一次的方法。
您正在尋找unittest.mock.patch 。 在測試期間,Patch用模擬版本替換了導入的模塊。 要了解的最重要的一點是,您必須在導入的地方而不是在其居住的地方打補丁。 這意味着您修補Player.pyautogui
,而不是pyautogui
本身。 您應該閱讀文檔中的“修補程序” 。
您可以將補丁裝飾器添加到您的測試函數中,然后將其替換為您想要的模擬內容。 傳遞的字符串應該是您運行測試的相對路徑(通常是項目的根目錄)。 我假設兩個文件都在同一個文件夾中,並且您從該文件夾運行測試。
然后,補丁裝飾器將在您的測試函數中通過MagicMock實例作為self
后面的參數。 您可以隨意命名。 在下面的示例中,我將其稱為mock_pyautogui
。 在函數內部,您可以像通常那樣進行斷言。
import unittest
from Player import Player
class Test_Player(unittest.TestCase):
@unittest.mock.patch("Player.pyautogui")
def test_play(self, mock_pyautogui):
player = Player()
player.play()
self.assertEqual(1, mock_pyautogui.click.call_count)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.