Ich versuche, die Annotation @Test (expected = RuntimeException.class) in zu verwenden Um eine erwartete Ausnahme zu testen. Mein Code ist wie folgt:
%Vor%und meine Speichermethode einfach so:
%Vor%Nach dem Debuggen des Codes habe ich festgestellt, dass der Code die Ausnahme wie erwartet auslöst, aber dass er irgendwo zwischen Spring Framework-Klassen gegessen wird.
Ich habe das gleiche mit altem Weg versucht (Versuch catch Block), aber immer noch bin ich nicht in der Lage, diese Ausnahme im Test zu fangen und Test wirft Fehler in runafter Methode von Junit werfen:
%Vor%Und ich bin mir sicher, dass dies wegen der RuntimeException ist, die ich einspare, aber nicht in der Lage bin, sie zu fangen oder den Test mit der erwarteten Klausel zu bestehen.
Hat jemand eine Idee, was schief geht?
Hier ist ein Workaround, den ich mit Junit 4.5 gefunden habe - Trennen Sie @Transactional und @ExpectedException in verschachtelte Funktionen. Ich denke, das Problem ist etwas mit dem AOP-Zeug zu tun, das eine @ Transactional-Methode umgeht.
%Vor%Es stellte sich heraus, dass meine erste Antwort falsch war. Sowohl @Test (erwartet = ...) als auch @ExpectedException funktionieren, aber es gibt eine gewisse Inkompatibilität zwischen Spring TestContext und Junit 4.5 . Die Verwendung von Junit 4.4 hat das Problem für mich gelöst. Endlich.
Entweder Sie führen einen Komponententest aus, in diesem Fall sollte Spring TX nicht zum Spielen kommen, oder Sie führen einen Integrationstest aus, bei dem Sie testen möchten, was die Speichermethode bei der Laufzeitausnahme