Skip to content

Commit fad89c9

Browse files
committed
lecture: add Java-'assert' keyword (JUnit Basics)
closes #902
1 parent 1644533 commit fad89c9

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

lecture/quality/junit-basics.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,50 @@ void fail();
188188
[Beispiel: junit4.TestAssume]{.ex href="https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture/blob/master/lecture/quality/src/junit4/TestAssume.java"}
189189

190190

191+
::: notes
192+
# Java: "assert"-Keyword
193+
194+
Neben den wohlbekannten `assert*`-Methoden aus JUnit gibt es auch direkt von
195+
Java ein etwas verstecktes `assert`-Keyword, mit dem man Annahmen über Zustände
196+
und Werte explizit ausdrücken kann:
197+
198+
```java
199+
public void foo() {
200+
String bar = wuppie();
201+
assert bar != null : "result of wuppie() must not be null";
202+
}
203+
```
204+
205+
Das `assert` besteht aus einer zu prüfenden Bedingung und einem String. Wenn die
206+
Bedingung erfüllt ist, läuft der Code einfach normal weiter. Anderenfalls wird ein
207+
`AssertionError` geworfen mit dem angegebenen String als Message.
208+
209+
Allerdings sind diese JVM-Assertions per Default **deaktiviert**. Man muss sie beim
210+
Aufruf manuell über die Option `-enableassertions` bzw. `-ea` (Kurzschreibweise)
211+
aktivieren (`java -ea main`)! Dies gilt auch beim Start über die IDE oder Gradle ...
212+
213+
:::::: warning
214+
Wichtig: Die Assertions sind per Default deaktiviert und müssen erst manuell aktiviert
215+
werden. Außerdem wird bei Verletzung der Bedingung eine *unchecked exception* (ein Error)
216+
geworfen, der auf einen nicht korrigierbaren Programmzustand hindeutet.
217+
218+
1. Nutzen Sie das Java-`assert` deshalb nicht als Ersatz für das normale Prüfen von
219+
Parametern von `public` Methoden (also Methoden der Schnittstelle, die Ihre Kunden
220+
aufrufen).
221+
222+
2. Während der Entwicklungszeit kann das Java-`assert` aber ganz nützlich sein, weil Sie so
223+
interne Annahmen sichtbar und prüfbar machen (vorausgesetzt, Sie haben `-ea` aktiviert).
224+
225+
Analog könnte ein Java-`assert` an Stellen eingebaut werden, die eigentlich nicht erreichbar
226+
sein sollten (etwa nach einer Dauerschleife oder in einem nicht erreichbaren `default`-Zweig
227+
in einem `switch`).
228+
229+
3. Bitte das Java-`assert` **nie** in einer JUnit-Testmethode statt der "richtigen"
230+
JUnit-`assert*` verwenden!
231+
::::::
232+
:::
233+
234+
191235
# Setup und Teardown: Testübergreifende Konfiguration
192236

193237
```java

0 commit comments

Comments
 (0)