【问题标题】:Expected methods never called when running python mox test运行 python mox 测试时从未调用过预期的方法
【发布时间】:2012-08-14 13:34:45
【问题描述】:

我正在尝试编写一个 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'}]

知道如何解决这个错误吗?

【问题讨论】:

    标签: python mox


    【解决方案1】:

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

    此外,由于您在类定义中继承了 mox.MoxTestBase(),因此您无需在最后调用 self.mox.Verify() — 根据 docs

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

    【讨论】:

    • 在我运行它时修复代码后,我不断收到:AttributeError: 'list' object has no attribute 'AndReturn' “AndReturn”是如何工作的?
    • "AndReturn" 是一个特定于 mox 的函数,可以在您用来存根函数的模拟对象上调用它。您可能直接在 Python 列表上调用它,而不是在您想要的模拟对象上调用它。您还应该在“记录”部分而不是“重播”部分确认您正在执行此操作。
    【解决方案2】:
    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多