[JAVA] Zusammenfassung der Ausführungsreihenfolge, z. B. Spock-Setup

Wenn ich mich umsehe, gibt es Leute, die davon abhängig sind, also dachte ich, es wäre gut, wenn ich nicht stolpern würde.

plötzlich

spock Ich werde es nicht im Detail erklären, aber es gibt einige Setup-Bereinigungen und einen Ort zum Definieren von Testdaten, der als where bezeichnet wird.

Schließen Sie schnell ab Mit einem Tisch und einem Bild

Definition zeitliche Koordinierung Bemerkungen
setupSpec Prüfung[Klasse]Am Anfang von[Einmal]Bewegung äquivalent zu statisch
setup Prüfung[Daten] [Jeder]Bewegt sich zuerst
cleanup Prüfung[Daten] [Jeder]Letzter Zug nach
cleanupSpec Prüfung[Klasse]Am Ende von[Einmal]Bewegung äquivalent zu statisch
where Prüfung[Methode]Am Anfang von[Für Daten]Bewegung äquivalent zu statisch

Grüne Buchstaben sind statisch und rote Buchstaben sind andere, von links gelesen

スクリーンショット 2020-04-01 20.32.17.png

Also, was ist das Problem

Zwei große

static Da dies der statischen entspricht, kann die Initialisierungsverarbeitung mit beispielsweise "@ Autowired" -Variablen nicht mit "setupSpec / cleanupSpec" aufgerufen werden.

Kann nicht von "wo" verwendet werden

Seien Sie vorsichtig, da dies normalerweise der Fall ist

Ausführungsreihenfolge

Es gibt viele hier

Insbesondere beim Erstellen von Testdaten, die jetzt usw. betreffen, gibt es Fälle, in denen der Test nicht wie erwartet erstellt und der Test abgeschlossen werden kann.

Wenn Sie beispielsweise Code schreiben, der die Systemuhr in "setup" verfälscht, erstellen Sie Testdaten, einschließlich "now in" where ", und führen Sie einen Mustertest durch. Die Reihenfolge besteht darin, die Systemuhr nach dem Erstellen der Testdaten zu manipulieren, damit sie nicht den Erwartungen entspricht.

Verschieben Sie in diesem Fall das Setup nach setupSpec

Wenn das Setup beispielsweise nicht innerhalb der statischen Verarbeitung durchgeführt werden kann, verzögert das Einschließen der Daten auf der "Where" -Seite mit "{}" und das Hinzufügen von "()" auf der "Expect" -Seite die Ausführung, aber Wenn Sie etwas Technisches mit Testcode machen möchten ** Meistens ist der Produktcode (= Design) ** falsch, also lassen Sie uns ihn gehorsam umgestalten

Es ist schnell vorbei

Bonus: Codebild des in der Ausführungsreihenfolge angegebenen Beispiels

In diesem Fall funktioniert es in der Reihenfolge mkData () -> setClock ()

def setup() {
    setClock()
}

def test() {
    expect:
    sut.f(data) == exp

    where:
    data     || exp
    mkData() || ...
}

Mach das

def setupSpec() {
    setClock()
}

def test() {
    expect:
    sut.f(data) == exp

    where:
    data     || exp
    mkData() || ...
}

Dies funktioniert in der Reihenfolge setClock () -> mkData ()

def setup() {
    setClock()
}

def test() {
    expect:
    sut.f(data()) == exp

    where:
    data         || exp
    { mkData() } || ...
}

Im Moment ist es jedoch viel einfacher zu testen, indem Sie es als Argument übergeben, als es intern in "sut.f" zu generieren. Es ist daher besser, zurück zu gehen, um die vorhandene Konstruktion zu überprüfen.

def test() {
    expect:
    sut.f(data, date(2020, 3, 1)) == exp

    where:
    data     || exp
    mkData() || ...
}

Recommended Posts

Zusammenfassung der Ausführungsreihenfolge, z. B. Spock-Setup
Nur Zusammenfassung zum Einrichten des Rails-Tutorials