【问题标题】:Python unittest: Mock problematic module/function from another ModulePython unittest:从另一个模块模拟有问题的模块/函数
【发布时间】:2020-12-09 22:49:43
【问题描述】:

B/moduleB.py 定义为:

def text_function():
    raise KeyError

text_function()

ModuleA.py 定义为:

from B.moduleB import text_function

class a():
    def __init__(self):
        self.text = 'abc'

    def mul(self, a, b):
        print(text_function() + str(a*b))

if __name__ == "__main__":
    rom = a()
    rom.mul(2, 3)

这是单元测试test_module.py

from unittest.mock import MagicMock, patch
from moduleA import a

class TestmoduleA(unittest.TestCase):
    def setUp(self):
        pass

    def test_mul(self):
        print(a.mul)
        self.assertTrue(True)

现在,有没有办法在从 moduleA 导入时模拟 B/moduleB.py 中的 text_function,这样我就看不到 KeyError

基本上,我不希望在测试模块A 时从模块B 运行任何东西

提前致谢:)

【问题讨论】:

    标签: python mocking python-unittest


    【解决方案1】:

    您的主要问题是在导入模块时已经调用了有问题的函数,因此您无法修补该函数(因为修补会导入原始模块并调用该函数)。在这种情况下,您必须在导入测试模块之前模拟导入本身:

    import unittest
    from unittest import mock
    import sys
    
    sys.modules['B.moduleB'] = mock.Mock()
    
    from moduleA import a
    
    class TestmoduleA(unittest.TestCase):
        def test_mul(self):
            print(a.mul) 
            self.assertTrue(True)
    

    有关更多信息,另请参阅how to mock an import

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 2013-12-25
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多