Wenn eine Exception fliegt, schlägt der Test doch sowieso fehl.
try {
// ...
catch (MySecurityException e) {
fail("this should not happen");
}
@Test
public void foo() {
try {
// do something
}
catch(MySecurityException e) {
// this is allowed here
}
}
Es ist doch aber genau so ein Fehler, wenn die Methode wegen jeder anderen, unbehandelten Exception abbricht. Und den findet JUnit ob du willst oder nicht.
Also das sind nun wirklich keine "Seiten-Effekte".Sie liefert einen return-Code
...
Sie schmeißt eine Exception.
das stimmt so nicht - wie oben geschrieben mit entsprechenden Spyframeworks ist es moeglich.. Wenn Du das nicht kannst, ist die Methode schlicht nicht (Unit-)testbar.
Was wäre denn ein besseres Wort? Ich wollte halt damit ausdrücken, dass man nach dem Ablauf einer Methode i.d.R. an einer bestimmten Stelle außerhalb der Methode Effekte beobachten kann.tfa hat gesagt.:Also das sind nun wirklich keine "Seiten-Effekte".
Vielleicht fasse ich den Begriff "Unit-Test" etwas zu eng, aber wenn ich externe Werkzeuge benutzen muss, würde ich nicht mehr von Unit-Tests sprechen.bygones hat gesagt.:das stimmt so nicht - wie oben geschrieben mit entsprechenden Spyframeworks ist es moeglich.
Man testet in dem Fall keine Logik seiner Unit, aber sozusagen die Choreografie
Das stimmt natürlich. Aber ich habe die immer als Einfachst-Implementierungen einer Schnittstelle gesehen, die die zu testende Unit bedient/benutzt. So "magisches" Zeugs wie Methodenaufrufe zu erfassen habe ich nie als deren Aufgabe angesehen. Aber vielleicht fasse ich auch den Begriff "Mock" zu eng. Auf jeden Fall sollte ich mich wohl mal mit Mockito etwas näher befassen.nillehammer, ohne mocks hat man meist keine echten unittests
Ein Unit Test heisst einfach du testest eine Einheit abgekoppelt von deren Abhaengigkeiten. Wenn du es schaffst durch einfach Instanzierung oder Dummy implementierungen diese Entkoppelung zu erreichen - hervorragend.Vielleicht fasse ich den Begriff "Unit-Test" etwas zu eng, aber wenn ich externe Werkzeuge benutzen muss, würde ich nicht mehr von Unit-Tests sprechen.