簡體   English   中英

Python:模擬導入的模塊方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM