[JAVA] Rendre System.out Mock avec Spock Test Framework

introduction

Pour la formation de cette année pour les nouveaux arrivants, nous avons modifié tout le code Java + écrit un test et apporté des modifications afin que le test le garantisse. À ce moment-là, j'utilisais aussi des paramètres, et quand je l'ai fait avec Spock, je suis resté coincé dedans, donc c'est un mémo. (Junit5 a rendu les choses plus faciles, mais c'est toujours un problème, donc j'utilise souvent spock)

environnement

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

Ce phénomène

Je créais un test pour vérifier ce qui était affiché en convertissant Java System.out en Mock avec spock. À ce moment-là, j'ai été frappé par un phénomène selon lequel une erreur se produisait au démarrage si je l'écrivais en douceur et la déplaçais.

Code en question

Vérifiez dans Hello World pour reproduire le phénomène. Le code du corps principal et le code de test sont les suivants.

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")
    }
}

Solution

Ce n'est pas grave si vous ajoutez cglib-nodep et objenesis comme dépendance (l'erreur le dit également). Alors, ajoutez-le et déplacez-le, et vous avez terminé. Le .build.gradle de travail final est le suivant.

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

Rendre System.out Mock avec Spock Test Framework
Créez un labyrinthe de fouilles avec Ruby2D
Créer un outil de diaporama avec JavaFX
Créer une carte de liste avec LazyMap
Mock seulement quelques méthodes avec Spock
Contrôleur de cadre de test Spring avec Junit
Faites un jeu de frappe avec ruby
Faisons une carte de Noël avec Processing!
Faites une liste de choses à faire en famille avec Sinatra
Créez quand même une fonction de connexion avec Rails
[docker] [nginx] Créer un ALB simple avec nginx
Utilisez FacesContext comme maquette avec PowerMockito
[Spring Boot] Je suis tombé sur un test du nombre d'appels de méthode (framework Spock)
Testez le contrôleur avec Mock MVC dans Spring Boot
Faisons une fonction de recherche avec Rails (ransack)
Tester le code à l'aide d'une maquette avec JUnit (centre EasyMock)
Exécutez Scala avec GraalVM et créez-en une image native
Faisons un Bot LINE avec Ruby + Sinatra - Partie 2
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
[Bases de Java] Créons un triangle avec une instruction for
[Mémo de travail de l'application personnelle] Créez un calendrier avec simple_calendar
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Faisons un Bot LINE avec Ruby + Sinatra - Partie 1
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant