2015-03-20 1 views
0

J'ai ma propre classe Article conçu pour wrok avec PostgreSQL. Chaque objet créé à partir de la classe est utilisé pour travailler avec une ligne. Maintenant, je ne sais pas comment tester le cas d'exception. Lorsque je crée un tel cas:comment tester l'exception en python fonctionnant avec postgresql

article = Article(2)/*connects to the db and loads line with id 2*/ 
print article.title2 /*here my db does not have table title2 and should launch an error*/ 

il devrait lancer une erreur. Et c'est le cas) A quoi devrait ressembler le cas de test? J'utilise unittest. Ma classe de test avec ma mauvaise méthode qui ne fonctionne est inférieure à pas:

import unittest 
from article import * /*import my ORM class*/ 
class EntityTest(unittest.TestCase): 
    def setUp(self): 
     Entity.db = psycopg2.connect("dbname='postgres' user='postgres' host='192.168.136.129' password='xxxxxxxxx'")/*creates connection to db*/ 
    def test_should_lounch_attr_error(self): 
     article = Article(2) 
     print article.title2 
     self.assertRaisesRegex(article.AttributeError, "No attribute exists") 

Je ne expirience comment créer des cas de test et pas beaucoup une bonne documentation sur la façon de le faire ((( Comme je l'ai undestood si TESTCASE passé (exception est générée), unittest devrait revenir déclaration Ok. maintenant, il montre juste erreur.

+0

Il montre une erreur, car il est levé avant votre déclaration assert, sur la ligne 'print article.title2'. Exemple d'utilisation de assertRaisesRegexp: https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaisesRegexp –

+0

Ce document a été le premier que j'ai coché. J'ai essayé de passer à self.assertRaisesRegexp (article.AttributeError, "Aucun attribut n'existe", article.atribute). Le même résultat – ovod

Répondre

2

Si vous ne fournissez pas appelable à assertRaisesRegexp() (NB assertRaisesRegexp(), non assertRaisesRegex()), il agit en tant que gestionnaire de contexte. Dans ce Si vous utilisez une instruction with comme ceci:

import unittest 
from article import * /*import my ORM class*/ 
class EntityTest(unittest.TestCase): 
    def setUp(self): 
     Entity.db = psycopg2.connect("dbname='postgres' user='postgres' host='192.168.136.129' password='xxxxxxxxx'")/*creates connection to db*/ 
    def test_should_lounch_attr_error(self): 
     with self.assertRaisesRegexp(article.AttributeError, "No attribute exists"): 
      article = Article(2) 
      print article.title2 

À moins que votre code ne puisse déclencher article.AttributeError avec des représentations de chaînes différentes, je ne pense pas que vous ayez vraiment besoin d'utiliser une regex pour cela. Vérifiez simplement article.AttributeError avec assertRaises(). Cela devrait suffire:

with self.assertRaisesRegexp(article.AttributeError): 
    article = Article(2) 
    print article.title2