如何模拟导入

发布于 2021-01-29 14:57:44

模块A包括import B在其顶部。然而在试验条件下,我想嘲笑
BA(模拟A.B)和进口完全避免B

实际上,B并不是故意在测试环境中安装的。

A是被测单元。我必须导入A所有功能。B是我需要模拟的模块。但我怎么能嘲笑B之内A,并停止A从导入实际B,如果第一件事情A确实是进口B

(未安装B的原因是我使用pypy进行了快速测试,但不幸的是B尚未与pypy兼容。)

怎么办呢?

关注者
0
被浏览
54
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以sys.modules['B']在导入之前分配给以A获取所需的内容:

    test.py

    import sys
    sys.modules['B'] = __import__('mock_B')
    import A
    
    print(A.B.__name__)
    

    A.py

    import B
    

    注意B.py不存在,但是运行时test.py不会返回错误并显示print(A.B.__name__)print
    mock_B。您仍然必须mock_B.py在模拟B实际功能/变量/等的地方创建一个。或者,您可以直接分配一个Mock()

    test.py

    import sys
    sys.modules['B'] = Mock()
    import A
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看