我必须测试是否调用方法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()被调用一次。
答案 0 :(得分:0)
您正在寻找unittest.mock.patch。在测试期间,Patch用模拟版本替换导入的模块。要理解它最重要的是你必须修补导入的地方,而不是它所在的地方。这意味着您需要修补Player.pyautogui
,而不是pyautogui
。您应该阅读文档中的"Where to Patch"。
您可以将补丁装饰器添加到测试函数中,并将其替换为模拟替换。传递它的字符串应该是运行测试的相对路径(通常是项目的根目录)。我假设您的两个文件都在同一个文件夹中,并且您从该文件夹运行测试。
补丁装饰器然后将测试函数传递给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)