Gio*_*ota 3 python tdd unit-testing mocking
我必须测试方法 pyautogui.click() 是否被调用。这是我的 Player.py 文件:
# Player.py
import pyautogui
class Player:
def play():
pyautogui.click(100, 100)
Run Code Online (Sandbox Code Playgroud)
这是我的测试文件:
# 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
Run Code Online (Sandbox Code Playgroud)
我尝试了pyautogui.click = MagicMock()
很多其他事情,但我真的找不到如何断言 pyautogui.click() 被调用一次。
您正在寻找unittest.mock.patch。补丁在测试期间用模拟版本替换导入的模块。要理解它的最重要的一点是,您必须在导入的地方修补某些内容,而不是在它所在的地方。这意味着您要修补Player.pyautogui
,而不是pyautogui
修补本身。您应该阅读“在哪里打补丁”文档中的
您可以将补丁装饰器添加到您的测试函数中,并将您想要用模拟替换的内容传递给它。您传递给它的字符串应该是运行测试的相对路径(通常是项目的根目录)。我假设您的两个文件都位于同一文件夹中,并且您从该文件夹运行测试。
然后,补丁装饰器将向您的测试函数传递一个 MagicMock 实例作为 after 的参数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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8278 次 |
最近记录: |