Was ist ein richtiger Weg, um SQLAlchemy-Code zu testen, der IntegrityError auslöst?

Ich habe dieses Q & A gelesen und versuche bereits, Ausnahme auf meinem Code zu fangen, die eine IntegrityError-Ausnahme auf diese Weise auslösen:

self.assertRaises(IntegrityError, db.session.commit()) 

Aber irgendwie ist mein Unit-Test immer noch fehlgeschlagen und stoppt mit der IntegrityError-Ausnahme. Ich erwarte, dass es OK sagt, wie ich schon von einer Ausnahme in meinem Unit-Test erwartet habe. Dies war Ursache durch Code, der versucht, Zeile mit den gleichen eindeutigen Feldwerten einzufügen.

Irgendeine Idee?

One Solution collect form web for “Was ist ein richtiger Weg, um SQLAlchemy-Code zu testen, der IntegrityError auslöst?”

Einer davon wird zum Trick:

 # ... only if version >= 2.7 with self.assertRaises(IntegrityError): db.session.commit() 

Oder:

 self.assertRaises(IntegrityError, db.session.commit) 

Der Unterschied zwischen Ihrem Beispiel und dem richtigen Weg ist:

 # Your example: You call db.session.commit(), this will raise an exception before # assertRaises is called self.assertRaises(IntegrityError, db.session.commit()) # Correct way: Pass what should be called to assertRaises, # let assertRaises invoke it and check for exception self.assertRaises(IntegrityError, db.session.commit) 

Ich ziehe es vor, assertRaises als Kontextmanager zu verwenden (mit with ).

  • Konvertieren von String zum Float SQLAlchemy
  • SQLAlchemy - INSERT ODER ERSETZEN Äquivalent
  • Sqlalchemy postgresql wo int = string
  • SQLAlchemy viele-to-many-Beziehung auf deklarative Tabellen
  • SqlAlchemy Äquivalent von pyodbc verbinden String mit FreeTDS
  • KeyError beim Hinzufügen von Objekten zum SQLAlchemy-Assoziationsobjekt
  • SQLalchemy mit mehrfacher Objekthierarchie
  • Ich habe psycopg2 in virtuellen env installiert, aber immer noch importerror psycopg2
  • Bestellen von Count of OneToMany Elixier Beziehung
  • Debugging (Anzeigen) SQL-Befehl an die db von SQLAlchemy gesendet
  • Python, SQLAlchemy und Postgresql: Vererbung von Vererbung
  • Python ist die beste Programmiersprache der Welt.