До сих пор не понимаю, как издеваться над импортированной библиотекой - Python - PullRequest
0 голосов
/ 05 ноября 2018

Я посмотрел вокруг, но все еще не понимаю, как смоделировать библиотеку, используемую внутри функции, и утверждать, что она была вызвана правильно.

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

1 Ответ

0 голосов
/ 23 ноября 2018

В вашем подходе есть ошибка.

win32clipboard - библиотека с некоторыми классами и методами. Вы должны издеваться над каждым классом из этой библиотеки, которую хотите использовать (OpenClipboard, EmptyClipboard, SetClipboardText и CloseClipboard)

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
...