[JAVA] Machen Sie System.out Mock mit dem Spock Test Framework

Einführung

Für das diesjährige Training für Neulinge haben wir den gesamten Java-Code geändert + einen Test geschrieben und Änderungen vorgenommen, damit der Test dies garantiert. Zu dieser Zeit habe ich auch Parameter verwendet, und als ich es mit Spock gemacht habe, bin ich darin festgefahren, also ist es ein Memo. (Junit5 hat es einfacher gemacht, aber es ist immer noch ein Ärger, deshalb benutze ich oft Spock)

Umgebung

Java8 Groovy 2.5 spock-core 1.2-groovy-2.5 Gradle4.10

Dieses Phänomen

Ich habe einen Test erstellt, um zu überprüfen, was angezeigt wird, indem Java System.out mit Spock in Mock konvertiert wurde. Zu dieser Zeit wurde ich von einem Phänomen getroffen, dass beim Start ein Fehler auftrat, wenn ich ihn reibungslos schrieb und verschob.

Code in Frage

Checken Sie in Hello World ein, um das Phänomen zu reproduzieren. Der Code des Hauptkörpers und der Testcode lauten wie folgt.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
class HelloWorldTest extends Specification {
    def mainTest() {
        setup:
        PrintStream printStream = Mock()
        System.out = printStream

        when:
        HelloWorld.main(null)

        then:
        1 * printStream.println("Hello World")
    }
}

Lösung

Es ist in Ordnung, wenn Sie cglib-nodep und objenesis als Abhängigkeit hinzufügen (der Fehler sagt dies auch aus). Fügen Sie es hinzu und verschieben Sie es, und Sie sind fertig. Die endgültige Arbeitsweise von .build.gradle lautet wie folgt.

plugins {
    id 'java'
    id 'groovy'
}

group 'com.tasogarei'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile "org.codehaus.groovy:groovy:2.5.6"
    testCompile "org.spockframework:spock-core:1.2-groovy-2.5"
    testCompile "cglib:cglib-nodep:3.2.10"
    testCompile "org.objenesis:objenesis:3.0.1"
}

Recommended Posts

Machen Sie System.out Mock mit dem Spock Test Framework
Machen Sie mit Ruby2D ein Labyrinth
Erstellen Sie mit JavaFX ein Diashow-Tool
Erstellen Sie eine Listenkarte mit LazyMap
Verspotten Sie nur einige Methoden mit Spock
Testen Sie den Spring Framework Controller mit Junit
Machen Sie ein Tippspiel mit Ruby
Machen wir eine Weihnachtskarte mit Verarbeitung!
Erstellen Sie mit Sinatra eine Familien-ToDo-Liste
Erstellen Sie trotzdem eine Anmeldefunktion mit Rails
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
Verwenden Sie FacesContext als Mock mit PowerMockito
[Spring Boot] Ich bin auf einen Methodenaufruf-Count-Test gestoßen (Spock-Framework)
Testen Sie den Controller mit Mock MVC im Spring Boot
Lassen Sie uns eine Suchfunktion mit Rails (Ransack) machen
Testcode mit Mock mit JUnit (EasyMock Center)
Führen Sie Scala mit GraalVM aus und machen Sie es zu einem nativen Image
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
[Arbeitsnotiz für persönliche Anwendungen] Erstellen Sie einen Kalender mit simple_calendar
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben