美文网首页软件测试Python 运维生活不易 我用python
Python单元测试中mock一个返回generator的函数

Python单元测试中mock一个返回generator的函数

作者: 耀凯考前突击大师 | 来源:发表于2017-06-24 14:08 被阅读105次

Python函数可以通过返回generator的方法节约内存。所谓的返回generator,就是通过yield语句返回一系列的值。这些值只有在程序的返回结果被迭代(iterate)的情况下才会被真正返回。有关yield语句的工作原理和generator的详细解释在这篇文章中。在此不做详细讨论。

当我们使用yield来返回一个方法的执行结果时,实际上返回的是一个generator。而这个generator中的值只有在之后循环这个generator(例如使用for循环)时才会被真正返回。这个循环的过程实际上调用的是genereator__iter__函数。所以我们只要mock所返回的generator__iter__函数的返回值即可。可以使用MagicMock()或者mock.patch()来创建mock

如下面的例子所示:

例如我们有如下类需要测试:

class example(object):
    def func(self):
        yield from [1, 2, 3]

eg = example()
list(eg.func())

以上代码的执行结果如下:

[1, 2, 3]

那么我们mock该类及其func函数的方法如下,注意为了配置generator的返回值,我们实际上mockfunc函数所返回的generator__iter__()的返回值。

from mock import MagicMock


mock_example = MagicMock()
mock_example.func.return_value.__iter__.return_value = iter([1, 2, 3])
list(mock_example.func())

以上代码的执行结果如下:

[1, 2, 3]

可见我们成功的mock了一个返回generator的函数。

相关文章

  • Python单元测试中mock一个返回generator的函数

    Python函数可以通过返回generator的方法节约内存。所谓的返回generator,就是通过yield语句...

  • 关于es6新属性yield

    关于es6新属性yield yield是Generator函数中中断函数返回的一个属性。Generator函数即一...

  • Generator函数实现斐波那契数列

    ES6 中 generator生成器函数 特点: 调用generator函数返回一个迭代器(iterator)对象...

  • 生成器

    生成器 在python中,使用了yield的函数被称为生成器(generator)。生成器是一个返回迭代器的函数,...

  • python mock server实现:flask

    一、什么是mock mock,即模拟。模拟一个对象,模拟接口返回。 二、什么场景要用mock 1、单元测试: 由于...

  • 异步函数笔记

    Generator1、执行Generator函数会返回一个遍历器对象。该函数并不执行,返回的也不是函数运行结果,需...

  • ES6学习笔记(18)之 Generator 函数的语法

    参考:ECMAScript 6 入门 Generator 函数概览 调用 Generator 函数,返回一个遍历器...

  • Python yield 的使用

    yield 的函数在 Python 中被称之为 generator(生成器)。替代return函数的需要循环返回值...

  • Mockito

    在单元测试中,为了隔离外部资源,使用mock构造一个虚拟对象,保证测试的目标函数能正常运行。有很多Mock方式,M...

  • Generator函数 笔记

    ❀ 总结一下,调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,...

网友评论

    本文标题:Python单元测试中mock一个返回generator的函数

    本文链接:https://www.haomeiwen.com/subject/brrkcxtx.html