Pentru inceput: Testele, sunt o parte importanta a unei aplicatii. Cu ajutorul lor reusesti sa-ti refactorizezi codul, motiv pentru care TDD (Test Driven Development) este incurajat, dar in acelasi timp, mai greu de pus in practica. Oricum, aici nu voi vorbi de TDD sau alte metode, ci voi scrie putin despre Mock Tests. Ce sunt Mock Testele? Ei bine, Mock Testele, sunt testele automate care folosesc obiecte de tip Mock; Obiecte construite pentru a simula obiecte deja existente in codul vostru. Mock Testele sunt folosite in deosebi in momentul in care aplicatia voastra comunica cu surse externe, surse care ofera reply-uri diferite la request-uri. Mock Testele si Python Pentru folosirea Mock Testelor in Python va puteti folosi de package-ul Mock. Il instalati usor cu: pip install mock Dar, sa trecem la niste exemple, pentru a vedea mai usor modul in care mock-ul este folosit in cod. 1. Sa presupunem ca avem urmatoarea clasa: >>> class A(): ... def now(self): ... return datetime.datetime.now() ... >>> O instanta a clasei A se va putea folosi de metoda now pentru a returna data curenta. >>> instance = A() >>> instance.now() datetime.datetime(2014, 5, 30, 17, 9, 51, 47591) >>> In cazul unui test, vom dori ca metoda now() sa returneze o valoare constanta, tinand cont ca in momentul de fata la fiecare rulare a testului vom avea o data noua. Aici sunt cateva exemple: Ex1: Definim o metoda noua in cadrul testului nostru mock_now() care sa returneze aceiasi valoare indiferent cand testul este rulat: >>> def mock_now(x ): ... return datetime(2014, 4, 9, 11, 50, 6, tzinfo=utc) ... >>> Apoi, cu ajutorul decoratorului patch, vom spune ca metoda now() a clasei A() sa fie inlocuita cu noua metoda mock_now(). >>> @patch('fisier.cu.clasa.A.now', mock_now) ... def test_method(self): ... testInstance = A() ... return testInstance.now() >>> In acest mod, testInstance.now() va returna (2014, 4, 9, 11, 50, 6, tzinfo=utc) Ex2: Se poate mockui metoda now() si fara definirea unei noi metode; Tot cu ajutrul decoratorului patch: >>> def test_method(self): ... with patch('fisier.cu.clasa.A.now') as mock_stuff: ... mock_stuff.return_value = datetime(2014, 4, 9, 11, 50, 6, tzinfo=utc) ... testInstance = A() ... return testInstance.now() >>> Ex3: In ultimul exemplu de mockuire al metodei, voi isntantia un obiect de tip Mock(). >>> def test_method(self): ... testInstance = A() ... testInstance.now = Mock() ... testInstance.now.return_value = datetime(2014, 4, 9, 11, 50, 6, tzinfo=utc) ... return testInstance.now() >>>