Sexta-feira Jul 17, 2009
Testes parte 2
Um pequeno refactoring do código anteriormente apresentado. Agora é mais fácil testar porque todo o código que conecta no banco fica em apenas uma função, e ao invés de criar stubs e mocks para o banco de dados, basta apenas refazer uma função dentro do código a ser testado
import psycopg2
def execute_query(query):
'Return a array of tuples' conn = psycopg2.connect('dbname=test')
cursor = conn.cursor()
cursor.execute(query)
ret = cursor.fetchall()
conn.close()
return ret
def func1():
ret = execute_query('select count(*) from tabela1')
return ret[0][0]
def func2():
ret = execute_query('select count(*) from tabela2')
return ret[0][0]
return row[0]
E os testes ficaram assim:
import unittest
import mox
import code_to_test
class MyTest(unittest.TestCase):
def setUp(self):
self.mox = mox.Mox()
def tearDown(self):
self.mox.UnsetStubs()
def _aux_exec(self, f, query, retval):
self.mox.StubOutWithMock(code_to_test, 'execute_query')
func = code_to_test.execute_query(query)
func.AndReturn(retval)
self.mox.ReplayAll()
ret = f()
self.mox.VerifyAll()
return ret
def test_func1(self):
f = code_to_test.func1
query = 'select count(*) from tabela1' retval = [(1,)] ret = self._aux_exec(f, query, retval) self.assertEquals(ret, 1) def test_func2(self):
f = code_to_test.func2
query = 'select count(*) from tabela2' retval = [(2,)] ret = self._aux_exec(f, query, retval) self.assertEquals(ret, 2)
Fiz uma função auxiliar nos testes para não repetir código, mas tenho minhas dúvidas se isso é bom. Pra mim, o código do teste deve ser bem simples, para ter a certeza que não tem bugs.
Posted at 09:32AM Jul 17, 2009 by ze in Python | Comments[0]
Comments:


