在调用模拟时检查dict是否有条目

问题描述

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

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

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

现在,我想检查当前被传递给foo的字典中是否存在"key"

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时执行检查。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...