title: Concept: Mocking DB python
body: <p>I'm working with postgresql and I have used MagicMock to test, but I'm not sure that I have understanded the mock's concepts. This is my example code (I have a dbname=test, table=py_test and user = simone):   </p>
  
  <pre><code>    import psycopg2
      import sys
      from mock import Mock, patch
      import unittest
      from mock import MagicMock 
      from collections import Counter
      import doctest
  
  
      class db(object):
          def __init__(self,database, user):
              self.con = None
              self.database = database
              self.user = user
  
          def test_connection(self):
              """Connection DB"""
              try:
                  self.con = psycopg2.connect(database=self.database, user=self.user)
                  return True
              except psycopg2.DatabaseError, e:
                  print 'Error %s' % e    
                  return False
  
          def test_empty_table(self,table):
              """empty table?"""
              try:
                  cur = self.con.cursor()
                  cur.execute('SELECT * from ' + table )
                  ver = cur.fetchone()
                  return ver
              except psycopg2.DatabaseError, e:
                  print 'Error %s' % e    
  
          def test_data_type(self, table, column):
              """data type"""
              try:
                  cur = self.con.cursor()
                  cur.execute("SELECT data_type from information_schema.columns where table_name = '"+ table + "' and column_name= '"+column+"'")
                  ver = cur.fetchone()
                  return ver
              except psycopg2.DatabaseError, e:
                  print 'Error %s' % e    
  
          def __del__(self):
              if self.con:
                  self.con.close()
  
      class test_db(unittest.TestCase):
  
          def testing(self):
              tdb = db('test','simone')
              self.assertTrue(tdb.test_connection(), 1)
              self.assertTrue(tdb.test_empty_table('py_test'), 1)
              self.assertTrue(tdb.test_data_type('py_test','id'), int)
  
      class test_mock(object):
          def __init__(self, db):
              self.db = db
          def execute(self, nomedb, user, table, field):
              self.db(nomedb, user)
              self.db.test_connection()
              self.db.test_empty_table(table)
              self.db.test_data_type(table, field)
  
  
      if __name__ == "__main__":
          c = MagicMock()
          d = test_mock(c)
          d.execute('test','simone','py_test','id')
          method_count = Counter([str(method) for method in c.method_calls])
          print c.method_calls
          print method_count
          print c.mock_calls
  </code></pre>