Da quanto ho capito, con finta, è necessità di fornire un tratteggiata nome durante l'applicazione delle patch. Fortunatamente, ogni modulo ha accesso a una variabile a livello di modulo speciale __name__
che contiene il nome del modulo. Usando questo, se si vuole correggere le variabili locali al modulo, si dovrebbe essere in grado di fare qualcosa di simile al seguente:
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())
Dando per scontato che hai salvato quel file come quicktest.py
, i test di unità danno questo risultato :
$ python -m unittest quicktest
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
E, naturalmente, from a.b import c
ti dà una variabile pianura c
nel pacchetto, quindi questo stesso meccanismo dovrebbe funzionare.
fonte
2013-06-26 15:56:04
-1 in quanto questo non risponde alla mia domanda. Volevo sapere come usarlo con ** percorsi relativi ** e ** percorsi non assoluti **. – Sardathrion
@Sardathrion Ok, ma tu non dici nulla nella tua domanda ... Dici solo che non vuoi usare sys.path – jvallver