![](/img/trans.png)
[英]unittest.mock.patch a class instance, and set method return values
[英]Mock method globally with unittest.mock.patch
我正在嘗試模擬一個由單獨模塊中的另一個方法調用的方法。 具體來說,我希望將 bar.py 中對foo
的調用替換為對mock_foo
的調用:
foo.py
def foo():
return 'foo'
酒吧.py
from foo import foo
def bar.py():
return foo()
測試.py
from bar import bar
def mock_foo():
return 'mock_foo'
def testmethod():
with patch('foo.foo', mock_foo):
print(bar())
# Expected output:'mock_foo'
上面的patch
方法不起作用。 這可能與模擬庫有關嗎? 如果是這樣,我應該如何修改test.py?
您應該修補導入 inside bar
模塊的foo
function。 所以,目標應該是bar.foo
。
例如
foo.py
:
def foo():
return 'foo'
bar.py
:
from foo import foo
def bar():
return foo()
test_bar.py
:
from bar import bar
import unittest
from unittest.mock import patch
def mock_foo():
return 'mock_foo'
class BarTest(unittest.TestCase):
def test_bar(self):
with patch('bar.foo', mock_foo):
print(bar())
self.assertEqual(bar(), 'mock_foo')
if __name__ == '__main__':
unittest.main()
單元測試結果:
⚡ coverage run /Users/dulin/workspace/github.com/mrdulin/python-codelab/src/stackoverflow/66540831/test_bar.py && coverage report -m --include './src/**'
mock_foo
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Name Stmts Miss Cover Missing
----------------------------------------------------------------------
src/stackoverflow/66540831/bar.py 3 0 100%
src/stackoverflow/66540831/foo.py 2 1 50% 2
src/stackoverflow/66540831/test_bar.py 12 0 100%
----------------------------------------------------------------------
TOTAL 17 1 94%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.