调用 mock 时检查 dict 是否有条目

Check if dict has entry when mock is called

我的一个 类 需要做这样的事情:

class A:
    def __init__(self, someDict, someOtherObject):
        self._someDict = someDict
        self._someOtherObject = someOtherObject

    def func(self):
       self._someDict["key"] = None
       self._someOtherObject.foo()

现在,我想检查 "key" 是否存在于传递的字典中,foo 被调用了。

class Test( unittest.TestCase ):
    def test_funcShouldAddKeyToDictionaryBeforeCallingFoo(self):
        objectMock = Mock()
        someDict = {}
        aUnderTest = A(someDict, objectMock)

        aUnderTest.func()

        # assert "key" in someDict when called objectMock.foo()

如何检查字典在调用 foo 之前是否已经有条目?

您可以将 foo 替换为您自己执行检查的函数:

class Test(unittest.TestCase):
    def test_funcShouldAddKeyToDictionaryBeforeCallingFoo(self):
        def check_dict():
            self.assertIn("key", someDict)

        objectMock = Mock()
        someDict = {}
        aUnderTest = A(someDict, objectMock)
        objectMock.foo = check_dict  # "check_dict" will be called instead of "foo"
        aUnderTest.func()

通过这种方式,您的检查在 foo 会根据需要在测试代码中调用时完成。