2017-09-16 123 views
0

我必須測試是否調用方法pyautogui.click()。這是我的Player.py文件:Python:模擬輸入模塊方法

# 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 ()被調用一次。

+1

我建議你[閱讀文檔](https://docs.python.org/3/library/unittest.mock.html)。至少給[mcve]。 – jonrsharpe

回答

0

您正在尋找unittest.mock.patch。修補程序會在測試期間用模擬版本替換導入的模塊。要了解它最重要的是,你必須補丁,它在哪裏進口,而不是它住的地方。這意味着你補丁Player.pyautogui,而不是pyautogui本身。您應該在文檔中閱讀"Where to Patch"

您可以將修補程序修飾器添加到您的測試功能中,並將其替換爲您想要替換的模型。您傳遞的字符串應該是您運行測試的相對路徑(通常是項目的根目錄)。我假設你的兩個文件都在同一個文件夾中,然後從該文件夾運行測試。

然後,修補程序修飾器將在self之後將您的測試功能作爲參數傳遞給MagicMock的一個實例。你可以隨便命名。我將在下面的示例中將其稱爲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)