Поддельный объект предназначен для быстрого и легкого представления сложного объекта без необходимости вручную проходить и настраивать заглушки для этого объекта во время теста. Это просто полезная утилита для упрощения написания тестов.
Что касается того, что/где насмехаться, все, что является внешним по отношению к модулю, подвергается издевательствам. Все, что вы хотите проверить, это текущий код модуля, а не код для некоторого модуля, который вызывается модулем под тестом.
Быстрый пример - это код, который использует модуль simplejson.
import simplejson
def my_fn(args):
return simplejson.dumps({'args': args})
Все, что вы хотите проверить, что функция my_fn делает правильный вызов simplejson.dumps(), так что вы издеваться simplejson. Вам все равно, если объект, переданный simplejson, правильно преобразован в json как тестирование, которое входит в объем модуля simplejson (у которого есть собственный набор тестов, которые вы можете запустить, если вы так склонны).
import working_code
import mock
@mock.patch('working_code.simplejson')
def test_my_fn(mock_simplejson):
working_code.my_fn('test-args')
mock_simplejson.dumps.assert_called_with({'args': 'test-args'})
Обратите внимание, что mock.patch - это просто хороший способ впрыскивания и удаления макетов для конкретного теста. После запуска test_my_fn рабочий_код.simplejson возвращается в состояние перед вызовом функции. Если это заблуждение, вы можете думать о тестовом примере, как:
import working_code
import mock
def test_my_fn():
mock_simplejson = mock.Mock()
working_code.simplejson = mock_simplejson
working_code.my_fn('test-args')
mock_simplejson.dumps.assert_called_with({'args': 'test-args'})
Возможный дубликат: http://stackoverflow.com/questions/1414032/why-create-mock-objects?rq=1 –
Но нет ничего о Python там, хотя он имеет небольшую часть ответов. Кроме того, примеров здесь не так уж много. Мое положение дел: я никогда не употреблял насмешек, теперь я должен издеваться над вещами, используя Python. Мне нужно что-то вроде «Mocking in Python for dummies»;) – user2091046
@ user2091046 +1 потому что у меня есть эти вопросы. Но на самом деле, это похоже на пять вопросов в одном, возможно, должно было быть разделено. Например, http://stackoverflow.com/questions/4370617/hard-coded-mock-objects-vs-mocking-framework – neuronet