我环顾四周,但仍然不知道如何模拟在函数内部使用的库并断言其已正确调用。

a.py

import win32clipboard

def copy():

    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText('dummy')
    win32clipboard.CloseClipboard()


test_a.py

import a
import pytest

def test_copy():

    # Mock win32clipboard somehow
    # Run a.copy()

    # assert mock win32clipboard.call_count == 4

最佳答案

您的方法有误。

win32clipboard是一个库,其中包含一些类和方法。您必须模拟该库中要使用的每个类(OpenClipboardEmptyClipboardSetClipboardTextCloseClipboard

import a
import pytest
from unittest.mock import patch

@patch('win32clipboard.OpenClipboard')
@patch('win32clipboard.EmptyClipboard')
@patch('win32clipboard.SetClipboardText')
@patch('win32clipboard.CloseClipboard')
def test_copy(mock_close, mock_set, mock_empty, mock_open):
    a.copy()

    assert mock_close.called
    assert mock_set.called
    assert mock_empty.called
    assert mock_open.called

07-28 00:45