Python 3 unittest不能在函数内部使用mock方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3 unittest不能在函数内部使用mock方法相关的知识,希望对你有一定的参考价值。

我在Python中尝试单元测试。

test.朋友

from unittest import TestCase,main
from unittest.mock import patch

import file

def mock_return(*args):
    return -1

class Tests(TestCase):
    @patch("file.Foo.a", side_effect=mock_return)
    def test_1(self, mock_fun):
        self.assertEqual(file.Foo().a(), -1)

    @patch("os.urandom", side_effect=mock_return)
    def test_2(self, mock_fun):
        self.assertEqual(file.Foo().b(), -1)

if __name__ == "__main__":
    main()

file.朋友

from os import urandom

class Foo:
    def a(self):
        return 1

    def b(self):
        return urandom(1)

为什么test_1通过但test_2失败了?有没有办法模拟其他类使用的方法?

答案

您必须修补正在测试的函数使用的绑定。

from os import urandom  # in file.py

将名称urandom绑定到os.urandom模块中的file函数。 Foo.b通过file.urandom绑定访问该函数。所以对Foo.b的测试必须修补file.urandom,而不是os.urandom

以上是关于Python 3 unittest不能在函数内部使用mock方法的主要内容,如果未能解决你的问题,请参考以下文章

Python 数据驱动 unittest + ddt

python单元测试-unittest

如何在unittest中捕获python子进程stdout

python——unittest(单元测试)

python - unittest 单元测试学习

Django 2021年最新版教程34python unittest 单元测试 覆盖率检测