groovy-lecture/skript/tests.md

2.3 KiB

Tests

Power Assertions

Genau wie in Java, gibt es in Groovy auch das Schlüsselwort assert. Im Gegensatz zu Java sind Assertions in Groovy jedoch standardmäßig aktiviert. Sie erleichtern die Fehlersuche und das Debugging und zeigen eine Übersicht des Ausdrucks mitsamt der aktuellen Variablenwerten. Der Entwickler sieht also genau, welcher Teil des Ausdrucks das Problem verursacht hat.

def a = 1
def b = 2
def c = 3

// Ausdruck liefert 9 statt 10
assert a + b * c == 10

Es kann während der Auswertung von Power-Assertions zu inkonsistenten Fehlermeldungen kommen. Das liegt daran, dass bei den Power-Assertions nur die Referenzen auf die Variablen gespeichert. Werden diese Werte also verändert, werden nur die aktuellen Werte angezeigt, da über die Referenz auf die Variable zugegriffen wird.

def getLastAndRemove(list) {
    return list.remove(list.size() - 1)
}
def list = [1, 2, 3]
assert getLastAndRemove(list) == 4
assert [[1,2,3,3,3,3,4]].first().unique() == [1,2,3]

Spock:

  • Groovy bietet nicht nur Support für JUnit 5 (und älter), sondern liefert auch einen eigenen Satz an Testmethoden, um die testgetriebene Programmierung zu vereinfachen.

Ein Beispiel hierfür wäre Spock. Mit Spock kann man sowohl Java, als auch Groovy Code testen. Getestet wird mit sogenannten Spezifikationen. Die Testklasse muss also von spock.lang.Specification erben.

class StackSpec extends Specification {
    def "Ein Element zum Stack hinzufuegen führt zur erhoehung von size"() {
        setup: "Eine neue Stack-Instanz wurde erstellt"
            def stack = new Stack()
        when:
            stack.push 42
        
        then: 
            stack.size() == 1
    }
}
Erklärung:
  • Der Name der Testmethode muss ein String sein, der beschreibt, was beim Testen erwartet wird.
  • Das Schlüsselwort setup dient dazu, lokale Variablen zu initialisieren, die für den Test gebraucht werden (vgl. @BeforeEach Annotation, JUnit)
  1. Das when Schlüsselwort beschreibt den Codeabschnitt, der zu einem bestimmten Verhalten führen soll
  2. then beschreibt das erwartete Verhalten.