gpt4 book ai didi

python - 使用 Mox 和 Python 测试模拟对象的调用顺序

转载 作者:行者123 更新时间:2023-11-28 20:58:16 24 4
gpt4 key购买 nike

我正在测试一个函数,该函数从一个辅助对象获取骨架对象,使用第二个辅助对象对其进行修改,然后将修改后的对象传递回第一个辅助对象。类似的东西:

class ReadModifyUpdate(object):
def __init__(self, store, modifier):
self._store = store
self._modifier = modifier

def modify(key):
record = self._store.read(key)
self._modifier.modify(record)
self._store.update(key, record)

使用 Python 和 Mox,我们可以测试它:

class ReadModifyUpdateTest(mox.MoxTestBase):
def test_modify(self):
mock_record = self.mox.CreateMockAnthing()
mock_store = self.mox.CreateMockAnything()
mock_modifier = self.mox.CreateMockAnything()

mock_store.read("test_key").AndReturn(mock_record)
mock_modifier.modify(mock_record)
mock_store.update("test_key", mock_record)
self.mox.ReplayAll()

updater = ReadModifyUpdate(mock_store, mock_modifier)
updater.modify("test_key")

...但这并没有发现在 modifier.modify() 之前无意中调用了 store.update() 的错误。在 Mox 中,有没有一种好方法来检查在多个模拟上调用的方法的顺序?类似于 EasyMock 的 MocksControl 对象?

最佳答案

也许不是最好的解决方案,但您可以尝试使用一个模拟,将其两次提供给被测对象。然后您可以控制调用顺序。

class ReadModifyUpdateTest(mox.MoxTestBase):
def test_modify(self):
mock_record = self.mox.CreateMockAnthing()
mock_storeModifier = self.mox.CreateMockAnything()

mock_storeModifier.read("test_key").AndReturn(mock_record)
mock_storeModifier.modify(mock_record)
mock_storeModifier.update("test_key", mock_record)
self.mox.ReplayAll()

updater = ReadModifyUpdate(mock_storeModifier, mock_storeModifier)
updater.modify("test_key")

关于python - 使用 Mox 和 Python 测试模拟对象的调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com