Ложный звонок, чтобы написать () - PullRequest
8 голосов
/ 11 ноября 2011

У меня есть класс logger, который должен записывать строки в файл.Итак, у меня есть такой метод:

def write_to_file(self, string):
  self.__file_handle.write(string)

Обратите внимание, что обработка ошибок была отредактирована.Очевидно, я хочу проверить это без записи в файл.Таким образом издевается через Макет .Я видел это , которое объясняет, как открыть макет, но здесь мне это не помогает - я открываю дескриптор файла в __init__.Теперь я могу сделать это в setUp (), но mock_open выходит из области видимости после setUp и, таким образом, бесполезен в тестовом примере.

Как бы вы написали тестовый метод для тестированияметод write_to_file с использованием Mock?

Ответы [ 3 ]

7 голосов
/ 12 сентября 2013

Я пришел сюда из Google, только через некоторое время понял, что это было встроено в макет с 1.0 с помощью mock_open

3 голосов
/ 11 ноября 2011

Просто на самом деле ...

from mock import patch

def setUp(self):
    [...]
    mock_file_handle = Mock()
    with patch('__builtin__.open') as mock_file_handle:
        self.sut = Logger()
    [...]

def test_write(self):
    [...]
    self.sut.write_message_to_file("ook?")
    self.assertTrue(self.sut.file_handle.write.called)
    self.assertTrue(self.sut.file_handle.flush.called)
    [...]

Если у кого-нибудь есть лучшее решение, пожалуйста, дайте мне знать ...

1 голос
/ 11 ноября 2011

Я бы начал со возможности изменить __file_handle на __init__. Как если бы вы заменили это любым поддельным / фальшивым объектом, имеющим подпись .write, вы можете проверить то, что ему написано.

Может быть, путем создания метода, который устанавливает __file_handle, а затем перезаписать метод для этого теста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...