代码之家  ›  专栏  ›  技术社区  ›  aydow

如何表现unittest.mock.call单元测试(第二章)

  •  0
  • aydow  · 技术社区  · 6 年前

    我正在使用的一个模拟包含调用 call().__str__() .

    输出 my_mock.mock_calls

    [call(<MagicMock name='mock()' id='140630678530704'>, indent=2, sort_keys=True),
     call().__str__(),            # <-- what I'm trying to represent
     call()]
    

    我怎么能代表这个?

    正在检查 mock_calls 会给我带来困难,因为它会被转换成字符串 'call()' .

    In [16]: mock.call().__str__()
    Out[16]: 'call()'
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   MrBean Bremen    6 年前

    如果我没听错的话,你想看看电话是否接通了 mock_calls . assert_called_xxx 已创建实例上的方法:

    @mock.patch('mymodule.SomeClass')
    def test1(mocked):
        inst = SomeClass()  # inst == mocked.return_value
        inst.__str__.assert_not_called()
    
        # use this if you don't have inst
        mocked.return_value.__str__assert_not_called()
    
        print(inst)
        inst.__str__.assert_called_once()
        mocked.return_value.assert_called_once()
        mocked.return_value.__str__.assert_called_once()
    

    call().__str__ mocked ,你查一下 __str__ mocked.return_value ,这是 call() .

    call.__str__()

    assert 'call.__str__()' in [str(c) for c in inst.mock_calls]
    

    或者,如果你想在课堂上检查:

    assert 'call().__str__()' in [str(c) for c in mocked.mock_calls]
    

    编辑: 嘲弄 .