如何测试模拟方法调用的默认参数?

2024-10-03 04:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

main.py

def sendContent(path = config.path):
    contentData = content.extractData(path)
    jsonContent = json.dumps(contentData, ensure_ascii=False, indent=4, sort_keys=True)
    logging.info("Creating json...")
    return config.createContent(jsonContent)

我想测试这个方法调用的属性。为此,我不得不模仿这个方法。但是,我可能不知道该怎么做,因为如果我不在mock中指定属性,它就不会使用默认参数(config.path)

以下是我的(众多)测试之一:

测试/testMain.py

def testSendContent():
    main.sendContent = Mock()
    main.sendContent()
    main.sendContent.assert_called_with(config.path)

AssertionError:未找到预期调用

如果在第3行,我放置main.sendContent(config.path),那么测试当然可以。。。但如果我不放任何东西,mock就不会使用默认参数

谢谢你的帮助


Tags: path方法pyconfigjson参数属性main
1条回答
网友
1楼 · 发布于 2024-10-03 04:29:34

“testSendContent”第二行上的模拟方法调用main.sendContent()不是sendContent函数的真正调用,它只是一个替换模拟函数调用。因为它是在没有参数的情况下调用的,而不是像您预期的那样使用实函数的默认参数

因此,您可以只使用模拟调用fit,而不是使用名为的assert_检查它:

  1. 如果要在测试过程中绕过sendContent的函数调用 您可以继续模拟它,并指定预期的返回值,如 这: main.sendContent=Mock(return\u value=“SOME\u PATH\u HERE”)

  2. 或者,如果只想测试sendContent,不要使用mock。只需拨打电话并使用: self.assertEqual(sendContent(),“SOME_PATH”)

相关问题 更多 >