gpt4 book ai didi

python - 如何在模拟对象中 stub 方法?

转载 作者:行者123 更新时间:2023-12-01 05:27:00 25 4
gpt4 key购买 nike

我需要测试代码片段(例如来自UnderTestClass类):

def _method_to_test(self)
...

ParsingObject = MyParsingClass()
if not ParsingObject.parse_string(some_string):
self.logger.error('Parsing data has failed.')
return False
return ParsingObject

无论我如何尝试,都无法覆盖最后一个返回语句 - return ParsingObject,所以我对 parse_string() 方法的模拟一定有问题。

我已经尝试过 Python 测试教程中的语句:

from my_app import myParsingClass
...

def test_method_to_test_success(self):
...

UnderTestClassMock = Mock(name='UnderTestClass')
parsePatch = patch('my_app.myParsingClass.MyParsingClass')
parseMock = parsePatch.start()
parseInstance = parseMock.return_value

parseInstance.parse_string.return_value = True

res = tested_module.UnderTestClass._method_to_test(UnderTestClassMock)

parsePatch.stop()

self.assertIsInstance(res, myParsingClass.MyParsingClass)

但不幸的是只得到:

AssertionError: False is not an instance of class 'my_app.myParsingClass.MyParsingClass'

更新:谢谢。我听从了你的建议,所以重写了一下:

    with patch('...') as ParseMock:
instance = ParseMock.return_value
ParseMock.parse_string.return_value = True
res = tested_module.UnderTestClass._method_to_test(UnderTestClassMock)
assert myParsingClass.MyParsingClass() is instance
assert myParsingClass.MyParsingClass() is res

但最后一行仍然出现断言错误。

编辑:我是否需要某种依赖注入(inject)机制/框架?

最佳答案

您需要在parseMock上设置return_value,而不是parseInstance:

parseMock.parse_string.return_value = True

您还需要在断言后停止()补丁

关于python - 如何在模拟对象中 stub 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138839/

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