【问题标题】:Mock call to write()模拟调用 write()
【发布时间】:2011-11-11 14:01:54
【问题描述】:

我有一个需要将字符串写入文件的记录器类。所以,我有一个这样的方法:

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

请注意,错误处理已被删除。显然,我想在不写入文件的情况下对此进行测试。因此通过Mock 模拟。我见过this,它解释了如何模拟打开,但在这里对我没有帮助——我在__init__ 中打开file_handle。现在,我可以在 setUp() 中执行此操作,但是在 setUp 之后 mock_open 似乎超出了范围,因此在测试用例中没有用。

您将如何编写一个测试方法来使用 Mock 测试 write_to_file 方法?

【问题讨论】:

    标签: python unit-testing mocking


    【解决方案1】:

    我是从 google 到这里的,过了一段时间才意识到这是自 1.0 以来使用 mock_open 内置在 mock 中的

    【讨论】:

    • 好收获!谢谢。
    【解决方案2】:

    真的很简单……

    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)
        [...]
    

    如果有人有更好的解决方案,请告诉我...

    【讨论】:

      【解决方案3】:

      我将从在__init__ 中更改__file_handle 的能力开始。就像您将其替换为任何具有 .write 签名的模拟/假对象一样,您可以测试写入它的内容。

      也许通过创建一个设置__file_handle 的方法,然后覆盖该测试的方法?

      【讨论】:

      • 这是一种方式。但也应该可以模拟 .write() 。
      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多