Chcę zrozumieć, w jaki sposób uzyskać @patch
funkcję z zaimportowanego modułu.Python Wyśmiewanie funkcji z zaimportowanego modułu
To jest, gdzie jestem tak daleko.
APP/mocking.py:
from app.my_module import get_user_name
def test_method():
return get_user_name()
if __name__ == "__main__":
print "Starting Program..."
test_method()
APP/my_module/__ init__.py:
def get_user_name():
return "Unmocked User"
test/mock-test.py:
import unittest
from app.mocking import test_method
def mock_get_user():
return "Mocked This Silly"
@patch('app.my_module.get_user_name')
class MockingTestTestCase(unittest.TestCase):
def test_mock_stubs(self, mock_method):
mock_method.return_value = 'Mocked This Silly')
ret = test_method()
self.assertEqual(ret, 'Mocked This Silly')
if __name__ == '__main__':
unittest.main()
Działa to tak, jak się spodziewałem. Moduł "załatany" po prostu zwraca niezmienioną wartość get_user_name
. Jak wyśmiewać metody z innych pakietów, które importuję do testowanej przestrzeni nazw?
Pytanie dotyczy "kpiny z najlepszych praktyk" lub czy to, co robisz ma sens? Odnośnie pierwszego, chciałbym użyć biblioteki szyderczej, takiej jak ['Mock'] (http://www.voidspace.org.uk/python/mock/), która jest zawarta w python3.3 + jako [' unittest .mock'] (http://docs.python.org/dev/library/unittest.mock). – Bakuriu
Pytam, czy mówię o tym prawie. Spojrzałem na Mock, ale nie widzę sposobu na rozwiązanie tego konkretnego problemu. Czy istnieje sposób na odtworzenie tego, co zrobiłem powyżej w Mock? – nsfyn55