1

我正在尝试编写一个读取电子表格(4 列)、获取提要并将特定列(2 列)写入 CSV 文件的 mox 测试。我试图通过第一步,即获取列表提要,我的代码如下:

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'}]

知道如何解决此错误吗?

4

2 回答 2

4

您需要实际触发调用 GetListFeed 的函数。直到您调用self.mox.ReplayAll()时,您只是在“记录” mox 进入重播模式后应该看到的内容。将 mox 置于重放模式后,您需要实际调用将调用的任何函数GetListFeed。在您的情况下,这似乎是testGetFeed或其父功能是什么。

此外,由于您mox.MoxTestBase()在类定义中进行子类化,因此您不需要self.mox.Verify()在最后调用 - 根据docs

你可以让你的测试用例成为 mox.MoxTestBase 的子类;这将在 self.mox 中自动创建一个模拟对象工厂,并在每次测试结束时自动验证所有模拟对象和未设置的存根。

于 2012-10-05T23:53:55.240 回答
1
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()
于 2013-05-08T16:17:29.103 回答