Python单元测试模拟,获取模拟函数的输入参数

标签 python unit-testing mocking

我想要一个单元测试来断言函数中的变量 action 被设置为它的预期值,唯一使用这个变量的时间是在调用库时传递它.

Class Monolith(object):
    def foo(self, raw_event):
        action =  # ... Parse Event
        # Middle of function
        lib.event.Event(METADATA, action)
        # Continue on to use the build event.

我的想法是我可以模拟 lib.event.Event,并获取其输入参数并断言它们具有特定值。

> 这不是模拟的工作方式吗?模拟文档的前后矛盾、不完整的示例以及过多与我想做的事情无关的示例让我感到沮丧。

最佳答案

您可以使用 call_argscall_args_list

一个简单的例子如下:

import mock
import unittest

class TestExample(unittest.TestCase):

    @mock.patch('lib.event.Event')
    def test_example1(self, event_mocked):
        args, kwargs = event_mocked.call_args
        args = event_mocked.call_args.args  # alternatively 
        self.assertEqual(args, ['metadata_example', 'action_example'])

我只是为可能需要它的人快速编写了这个示例——我还没有实际测试过它,所以可能存在一些小错误。

关于Python单元测试模拟,获取模拟函数的输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129350/

相关文章:

python - 如果我有完整的 url,如何使用函数 socket.gethostbyname 获取 IP 地址?

python - 如何为 Tornado IOStream 设置超时?

android - 如何模拟Android中的点击按钮进行单元测试

java - JMockit:如何模拟 protected 方法?

perl - Perl 中用于单元测试和模拟对象的好的框架是什么?

python - 如何正确记录 python Flask 路线

python - 为什么属性名不能是 Python 关键字?

java - 如何在 JUnit 中为此类编写单元测试

node.js - 使用 mocha 单元测试异步 waterfall

python - 为什么python模拟补丁不起作用?