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 ).

  • Ein SQLAlchemie-Ergebnis in Flasche einstellen
  • In SQLAlchemy, wie kann ich ein Ereignis definieren, um DDL mit deklarativer Syntax zu schießen?
  • Ordnung durch eine Methode, die in einer Klasse in SQLAlchemy enthalten ist
  • Möglich, ein Objekt zur SQLAlchemy-Sitzung ohne explizite Session.add () hinzuzufügen?
  • Schreiben von Dataframe in die Postgres-Datenbank
  • Zuordnung db varchar zu Domänenobjekt bool
  • Wie benutzt man Subqueries in SQLAlchemy, um einen gleitenden Durchschnitt zu erzeugen?
  • Wiederkehrende Zeilen in SQLAlchemy mit SQLite
  • Bedingte Filterung in SQLAlchemy
  • Ist es möglich, einen SQLalchemy-Fremdschlüssel in einem Modell zu füllen und es das zugehörige Objekt zu laden
  • Wie kann man mit SQLAlchemy innere Verknüpfung erreichen?
  • Python ist die beste Programmiersprache der Welt.