2017-11-20 9 views
0

printlnを実行するgroovy関数から出力をテストする方法を知りたかっただけです。だから私が書いた愚かなクラスがある:greet()が文字列を返した場合印刷機能からのSpockテスト出力

class FriendlyGreeterLib { 
    def greet(name) { 
     println "${name.capitalize()}" 
    } 
} 

対応する試験は、働くだろう。しかし、どのように... stdoutにRoygへ

import spock.lang.Shared 
import spock.lang.Specification 

class FriendlyGreeterLibTest extends Specification{ 

    @Shared lib 

    def setupSpec() { 
     lib = new FriendlyGreeterLib() 
    } 

    def "FriendlyGreeterLib greets capitalized"() { 
     expect: 
     lib.greet(x) == y 

     where: 
     x | y 
     'fred' | 'Fred' 
     'FRED' | 'FRED' 
     'fRED' | 'FRED' 
    } 
} 
+1

それをテストする目的は何ですか?それは動作します..入力をテストする必要がある場合は、メッセージフォーマットを担当するロジックを別のクラスに移動します。 – Opal

+1

出力をファイルに出力し、ファイルの内容を確認します。 – Royg

答えて

1

感謝をprintlnの出力をチェックするために、私はただのSystem.outに異なるストリームを設定し、ストリームバッファを読み出すためのアイデアに来ました。私は、これは絶対にエレガントであるかどうかわからないんだけど、それは動作します:

完全テスト:

import spock.lang.Shared 
import spock.lang.Specification 

class FriendlyGreeterLibTest extends Specification{ 

    @Shared lib 

    def setupSpec() { 
     lib = new FriendlyGreeterLib() 
    } 

    def "FriendlyGreeterLib greets capitalized"() { 
     when: 
     def buffer = new ByteArrayOutputStream() 
     System.out = new PrintStream(buffer) 

     and: 
     lib.greet(x) 

     then: 
     buffer.toString() == y 

     where: 
     x | y 
     'fred' | 'Fred' 
     'FRED' | 'FRED' 
     'fRED' | 'FRED' 
    } 
} 
関連する問題