#python #python-3.x #python-unittest #python-unittest.mock
#python #python-3.x #python-unittest #python-unittest.mock
Вопрос:
Один из моих классов должен сделать что-то вроде этого:
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?
Комментарии:
1. Откуда берется
_someObject
свойство?2. @slideshowp2 Спасибо, что указали на это. Это была ошибка. Должно быть
_someOtherObject
3.
assert "key" in a._someDict
?4. @MrBeanBremen Но что, если «ключ» был добавлен в словарь после вызова foo. Тест пройдет, хотя я не хочу, чтобы он проходил. Моя цель — распознать, была ли добавлена словарная запись до того, как я вызвал foo() , а не только если она была добавлена.
5. Ах, извините — очевидно, я неправильно прочитал ваш вопрос. Теперь понял…
Ответ №1:
Вы можете 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
, была бы вызвана в тестируемом коде по мере необходимости.