從我所收集,用模擬物,你需要提供點打補丁時的名字。幸運的是,每個模塊都可以訪問包含模塊名稱的特殊模塊級變量__name__
。用這種方法,如果要修補的局部變量的模塊,你應該能夠做到像下面這樣:
import mock
import unittest
ook = lambda: "the ook"
class OokTest(unittest.TestCase):
def test_ook(self):
with mock.patch(__name__ + '.ook', return_value=None):
self.assertIsNone(ook())
self.assertEquals(ook(), "the ook")
# the patch decorator should work the same way, I just tend to use the
# context manager out of personal preference
@mock.patch(__name__ + '.ook', return_value=None)
def test_ook_2(self, mock_ook):
self.assertIsNone(ook())
假設您保存該文件爲quicktest.py
,單元測試給這個結果:
$ python -m unittest quicktest
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
和當然,from a.b import c
給你一個簡單的變量c
在你的包,所以同樣的機制應該工作。
-1,因爲這並沒有回答我的問題。我想知道如何使用**相對**路徑和**不是絕對路徑**。 – Sardathrion
@Sardathrion好的,但是在你的問題中你不會說這些......你只說你不想使用sys.path – jvallver