Ожидаемые методы никогда не вызывались при запуске Python mox test

Я пытаюсь написать тест mox, который читает электронную таблицу (4 столбца), получает фид и записывает определенные столбцы (2 столбца) в файл CSV. Я пытаюсь пройти первый шаг - получить фид списка, мой код выглядит следующим образом:

class SpreadsheetReader(mox.MoxTestBase):

  def setUp(self):
    mox.MoxTestBase.setUp(self)
    self.mock_gclient = self.mox.CreateMock(
                                            gdata.spreadsheet.service.SpreadsheetsService)
    self.mock_spreadsheet_key = 'fake_spreadsheet_key'
    self.mock_worksheet_id = 'default'
    self.test_data = [{'str_col':'col1', 'str_col':'col2', 'str_col':'col13'}]


  def testGetFeed(self):

    self.mock_gclient.GetListFeed(self.mock_spreadsheet_key,
                                  self.mock_worksheet_id).AndReturn(self.test_data)

    self.mox.ReplayAll()
    self.mox.Verify()


  def tearDown(self):
    mox.MoxTestBase.tearDown(self)

Когда я запускаю это, я получаю следующую ошибку:

ExpectedMethodCallsError: Verify: Expected methods never called:
  0.  SpreadsheetsService.GetListFeed('fake_spreadsheet_key', 'default') -> [{'str_col': 'col13'}]

Есть идеи, как исправить эту ошибку?

2 ответа

Решение

Вы должны на самом деле вызвать функцию, которая будет вызывать GetListFeed. До точки, которую вы называете self.mox.ReplayAll(), вы только "записываете" то, что mox должен увидеть, как только он переведен в режим воспроизведения. После того, как вы переведете mox в режим воспроизведения, вам нужно будет вызвать любую функцию GetListFeed, В вашем случае это, кажется, testGetFeed или какой бы ни была его родительская функция.

Кроме того, потому что вы подкласс mox.MoxTestBase() в вашем определении класса, вам не нужно звонить self.mox.Verify() в конце - согласно документам,

вы можете сделать ваш тестовый пример подклассом mox.MoxTestBase; это автоматически создаст фабрику фиктивных объектов в self.mox и автоматически проверит все фиктивные объекты и незадействованные заглушки в конце каждого теста.

self.mox_gclient = self.mox.CreateMock(gdata.spreadsheet.service.SpreadsheetsService)
self.mox_gclient.StubOutWithMock(ActualClass,"method_to_be_tested").AndReturn(retValue)
self.mox_gclient.VerifyAll()
Другие вопросы по тегам