marți, 19 mai 2009

Python si Mocker

In acest tutorial voi prezenta un mod de testare care va ajuta sa eliminati dependentele(de scriere pe disk, de query-uri catre baze de date, etc...) si sa urmariti rularea propriu-zisa a algoritmului. Pentru a putea face acest lucru, trebuie sa permiteti functiei/clasei dumneavoastra sa "injecteze" obiecte in algoritm. In exemplul urmator vom arata cum se poate elimina dependenta de sistemul de fisiere.

def algoritm_complex(objOpen=open):
#aici vine rularea algoritmului

#aici vine partea de dependenta de hdd
f = objOpen("fisier.txt", "w")
f.write("testare simpla")
f.close()

Observam ca in functia de mai sus am furnizat un parametru cu valoare default buitin-ul open. In aceasta maniera in momentul in care functia va fi apelata intr-un mediu de productie nu va fi furnizat nici un parametru in timp ce in momentul in care se va dori testarea algoritmului se fa furniza o functie simulata. In continuare prezint partea de "mocking":

def test_AlgoritmComplex():
controller = Mocker()
objOpen = controller.mock()
fMocked = controller.mock()

objOpen.open("fisier.txt", "w")
controller.result(fMocked)

fMocked.write("testare simpla")

fMocked.close()

controller.replay()

algoritm_complex(objOpen.open)

Asta e tot ce aveti nevoie. Daca functia ar fi returnat un rezultat puteati face un assert pe valoarea returnata doar ca sa va asigurati ca algoritmul a functionat asa cum ati dorit. Pentru mai multe informatii despre acest mod de testare, vizitati site-ul http://labix.org/mocker.

Niciun comentariu:

Trimiteți un comentariu