补丁不适用于不同的导入语句
patch does not work with different import statement
我的问题与以下代码片段有关。在第一个中,我使用“from ... import ...”-style 导入 time.sleep:
from time import sleep
class Tests( unittest.TestCase ):
def test_sleep( self ):
with patch( "time.sleep" ) as sleepMock:
sleep( 0.01 )
sleepMock.assert_called_with( 0.01 )
对于第二个,我选择了“导入...”风格:
import time
class Tests( unittest.TestCase ):
def test_sleep( self ):
with patch( "time.sleep" ) as sleepMock:
time.sleep( 0.01 )
sleepMock.assert_called_with( 0.01 )
第二个按预期运行良好。但是第一个没有打补丁time.sleep。为什么第一个不起作用,尽管我正在导入相同的功能?成功模拟 'time.sleep'
的第一个示例中的 patch 语句会是什么样子?
甚至更好:有没有办法修补这个模块,与我如何在我的生产代码中导入 time.sleep 函数无关?
测试用例1:
from time import sleep
import unittest
from unittest.mock import patch
class Tests(unittest.TestCase):
def test_sleep(self):
with patch("__main__.sleep") as sleepMock:
sleep(0.01)
sleepMock.assert_called_with(0.01)
if __name__ == '__main__':
unittest.main()
结果:
python3 64550935-a.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
测试用例2:
import time
import unittest
from unittest.mock import patch
class Tests(unittest.TestCase):
def test_sleep(self):
with patch("time.sleep") as sleepMock:
time.sleep(0.01)
sleepMock.assert_called_with(0.01)
if __name__ == '__main__':
unittest.main()
结果:
python3 64550935-b.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
看看官方文档的patch例子
我的问题与以下代码片段有关。在第一个中,我使用“from ... import ...”-style 导入 time.sleep:
from time import sleep
class Tests( unittest.TestCase ):
def test_sleep( self ):
with patch( "time.sleep" ) as sleepMock:
sleep( 0.01 )
sleepMock.assert_called_with( 0.01 )
对于第二个,我选择了“导入...”风格:
import time
class Tests( unittest.TestCase ):
def test_sleep( self ):
with patch( "time.sleep" ) as sleepMock:
time.sleep( 0.01 )
sleepMock.assert_called_with( 0.01 )
第二个按预期运行良好。但是第一个没有打补丁time.sleep。为什么第一个不起作用,尽管我正在导入相同的功能?成功模拟 'time.sleep'
的第一个示例中的 patch 语句会是什么样子?
甚至更好:有没有办法修补这个模块,与我如何在我的生产代码中导入 time.sleep 函数无关?
测试用例1:
from time import sleep
import unittest
from unittest.mock import patch
class Tests(unittest.TestCase):
def test_sleep(self):
with patch("__main__.sleep") as sleepMock:
sleep(0.01)
sleepMock.assert_called_with(0.01)
if __name__ == '__main__':
unittest.main()
结果:
python3 64550935-a.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
测试用例2:
import time
import unittest
from unittest.mock import patch
class Tests(unittest.TestCase):
def test_sleep(self):
with patch("time.sleep") as sleepMock:
time.sleep(0.01)
sleepMock.assert_called_with(0.01)
if __name__ == '__main__':
unittest.main()
结果:
python3 64550935-b.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
看看官方文档的patch例子