首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入被测模块的模拟方法

导入被测模块的模拟方法
EN

Stack Overflow用户
提问于 2012-02-02 20:15:33
回答 2查看 256关注 0票数 1

假设我想测试这个模块:

代码语言:javascript
复制
import osutils

def check_ip6(xml):
  ib_output = osutils.call('iconfig ib0')
  # process and validate ib_output (to be unit tested)
  ...

这个方法依赖于环境,因为它进行一个系统调用(需要一个特定的网络接口),所以在测试机器上是不可调用的。

我想为该方法编写一个单元测试,用于检查ib_output的处理是否按预期工作。因此,我想模拟osutils.call,让它只返回测试数据。做这件事的首选方法是什么?我必须做模拟或(猴子)修补吗?

示例测试:

代码语言:javascript
复制
def test_ib6_check():
    from migration import check_ib6
    # how to mock os_utils.call used by the check_ib6-method?
    assert check_ib6(test_xml) == True
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 20:26:31

一种解决方案是执行from osutils import call,然后在打补丁时,在调用test_ib6_check之前用其他东西替换yourmodule.call

票数 1
EN

Stack Overflow用户

发布于 2012-02-02 20:44:28

好吧,我发现这与mock没有任何关系,我只需要一个猴子补丁:我需要导入并更改调用方法,然后导入测试下的方法(而不是整个模块,因为它会导入原始的osutils.call--method)。因此,此方法将使用我更改后的call- method:

代码语言:javascript
复制
def test_ib6_check():
    def call_mock(cmd):
        return "testdata"    
    osutils.call = call_mock
    from migration import check_ib6
    # the check_ib6 now uses the mocked method
    assert check_ib6(test_xml) == True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9112156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档