LoginSignup
0
0

More than 5 years have passed since last update.

Spock Test FrameworkでSystem.outをMockにする

Last updated at Posted at 2019-03-02

はじめに

今年の新人向け研修向けにJavaコードを全部手直し+テストを書いて変更してもテストで保証するようにという対応をしていました。
その際にパラメータも使うしSpockでいいやとして作った時に際にはまったのでメモです。
(Junit5で楽になりましたが、それでも面倒なので自分はspock使うことが多いです)

環境

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

今回の現象

spockでJavaのSystem.outをMock化して表示したものを確認するというテストを作成していました。
その際にさらさらーっと書いて動かしたら起動時にエラーとなってしまうという現象に見舞われました。

問題となるコード

現象を再現するためにHello Worldで確認します。
本体のコードとテストコードは以下の通りです。

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

解決策

cglib-nodepとobjenesisをDependencyとして追加してあげればOKです(エラーにもそう書いてます)。
なので、追加して動かせば終わりです。
最終的に動作した.build.gradleは以下の通りです。

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0