Mam funkcję Chcę, aby test jednostki zawierał połączenia dwóch innych funkcji. Nie jestem pewien, w jaki sposób mogę sfałszować obie funkcje w tym samym czasie, poprawnie używając łaty. Podałem przykład tego, co mam na myśli poniżej. Kiedy przeprowadzam testy nosa, testy mijają, ale czuję, że musi być na to czystszy sposób i naprawdę nie rozumiem tego fragmentu dotyczącego f.close() ...Kpiny z dwóch funkcji z łatką do testu jednostkowego
Struktura katalogów wygląda następująco:
program/
program/
data.py
tests/
data_test.py
data.py:
import cPickle
def write_out(file_path, data):
f = open(file_path, 'wb')
cPickle.dump(data, f)
f.close()
data_test.py:
from mock import MagicMock, patch
def test_write_out():
path = '~/collection'
mock_open = MagicMock()
mock_pickle = MagicMock()
f_mock = MagicMock()
with patch('__builtin__.open', mock_open):
f = mock_open.return_value
f.method.return_value = path
with patch('cPickle.dump', mock_pickle):
write_out(path, 'data')
mock_open.assert_called_once_with('~/collection', 'wb')
f.close.assert_any_call()
mock_pickle.assert_called_once_with('data', f)
Wyniki:
$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.008s
OK
Myślę, że moje pierwotne pytanie było jasne, więc czyściłem go. Mam nadzieję, że to ukaże to, czego szukam dokładniej! – cnodell