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方法的主要内容,如果未能解决你的问题,请参考以下文章