Форум сайта python.su
Здравствуйте всем.
У меня есть желание написать умные юнит-тесты для драйвера устройства Х, которые будут работать без этого устройства.
Мне нужно как-то использовать модуль mock, чтобы импортировать модуль драйвера в тест и запускать его функции, которые не будут обращаться к устройству а будут логировать все что посылается на устройство, чтобы можно было потом эти данные сравнить с ожидаемыми.
Посмотрел примеры использования данного модуля и как-то не воодушевился.
Киньте ссылкой или примером. Спасибо.
Офлайн
Мне помогло то, что мне советовали тут: http://python.su/forum/topic/14791/
Офлайн
class Driver(object): def foo(a, b, c): print a, b, c def bar(a, b, c): print a, b, c import mock driver = mock.Mock() driver.foo(1, 2, 3) driver.bar(4, 5, 6) driver.foo.assert_called_with(1, 2, 3) driver.bar.assert_called_with(4, 5, 7) #AssertionError: Expected call: bar(4, 5, 7) #Actual call: bar(4, 5, 6)
Офлайн
reclosedev, это будет работать???
откуда у driver появляются методы foo и bar? как мы можем быть уверены, что это именно mock объект от класса Driver?
и как “проверить” вывод, если функция скажем такая:
class Driver(object): def f(a, b): if b.get(s) and a.get(s): return a.s + b.s else return a.get(s)
import mock import driver dr = mock.Mock() # or may be mock.Mock(Driver) ? a = [] b = 3 c['s'] = 'test' dr.f(a,b) dr.f(a,c) driver.foo.assert_called_with(c, c)
Офлайн
Надеюсь вы читали документацию? http://www.voidspace.org.uk/python/mock/getting-started.html
xwizardВ этом примере Driver полностью заменен на Mock, поэтому у него есть любые методы.
откуда у driver появляются методы foo и bar?
xwizardМы же сами заменили.
как мы можем быть уверены, что это именно mock объект от класса Driver?
xwizardЗачем ее вообще заменять Mock'ом, она же ничего внешнего не делает?
и как “проверить” вывод, если функция скажем такая:
import driver with patch.object(driver.Driver, 'query_device') as mock_method: mock_method.return_value = "1234" real = driver.Driver() real.query_device(1, 2, 3) # или другие вызовы, которые могут вызвать query_device mock_method.asserd_called_with(1, 2, 3)
Отредактировано reclosedev (Июнь 23, 2012 09:47:14)
Офлайн