如何在Python

时间:2015-10-08 17:11:47

标签: python python-3.x mocking decorator python-decorators

我正在为我的包编写一些单元测试。我们说我有以下文件:

  • 包/ a.py
  • 封装/测试/ test_a.py

在a.py中,我有课程:

class A:

    def m(x):
        def n(y):
            def o(self, z):
                pass # Parsing z
                if len(z) == x:
                    y(self, z)
            return o
        return n

在test_a.py中,我使用from package import a指令。作为这个单元测试的一部分,我想知道y是否被调用但是没有调用y(模拟这个调用)。

我怎么能做这个嘲笑?

1 个答案:

答案 0 :(得分:1)

只需将模拟对象传递为y

from unittest.mock import MagicMock

decorator = A.m(1)
y_mock = MagicMock()
decorated = decorator(y_mock)

self_mock = MagicMock()
decorated(self_mock, ['foo'])

y_mock.assert_called_with(self_mock, ['foo'])

上面通过调用A.m()创建了一个装饰器,将装饰器应用到y_mock对象,生成一个装饰的'函数,就像你使用了行{{1在@A.m(1)函数定义语句之前。

然后我为装饰器创建了2个参数,这样您就可以轻松测试def是否被正确调用。