编程语言
首页 > 编程语言> > python模拟补丁顶层包

python模拟补丁顶层包

作者:互联网

python中使用mock不能完全修补顶级软件包(如argparse)-大概是因为没有引用patch.一种解决方案是将每个单独的调用修补到包中(例如argparse.ArgumentParser).从理论上讲,如果在没有相应补丁的情况下添加了对程序包的调用,这将导致在单元测试期间意外调用导入.

尽管解决方法并不十分麻烦,但最好直接修补argparse这样的软件包. mock_open似乎使用了一些恶作剧来使用__main__.open修补内置的open().它是如何工作的,是否可以使用类似的恶作剧来修补顶级软件包?

解决方法:

import unittest.mock as mock

mock_argparse = mock.Mock()
with mock.patch.dict('sys.modules', argparse=mock_argparse):
    import argparse
    print(argparse.ArgumentParser()) 
# <Mock name='mock.ArgumentParser()' id='140681471282448'>

至于mock_open补丁:

m = mock_open()
with patch('__main__.open', m, create=True):

似乎它使用模拟对象创建了__main__.open属性,该属性遮盖了内置版本,就好像您在模块中定义了open()函数一样.我想对于实际测试,应该修补module_x.open(),其中“ module_x”是实际调用open()的模块.

标签:python-mock,unit-testing,mocking,python
来源: https://codeday.me/bug/20191121/2055445.html