2017-04-10 6 views
0

spock unit-testsについては、grails 3.1.7でInputStreamを嘲笑することに問題があります。Spock mocking inputStreamが無限ループを引き起こすp2

私はlinkの前に同様の質問をしました。

問題が解決しましたが、@CompileStaticアノテーションを追加したときに戻ってきました。私のコード:

@CompileStatic 
class MongoImage implements Image { 
    GridFSFile gridFSFile 
    ... 
    byte[] getBytes() { 
     ((GridFSDBFile) gridFSFile).inputStream?.bytes 
    } 
} 

私のテスト:

given: 
List<Byte> byteList = "test data".bytes 
def inputStream = GroovyMock(InputStream) 
def gridFSDBFile = Mock(GridFSDBFile) 
def mongoImage = new MongoImage(gridFSDBFile) 

when: 
List<Byte> result = mongoImage.getBytes() 

then: 
1 * gridFSDBFile.getInputStream() >> inputStream 
1 * inputStream.getBytes() >> byteList 
0 * _ 

このテストの実行が無限の呼び出しに分類されます。それはGroovyMock(InputStream)Mock(InputStream)を置き換えることで解決した私の前の質問については

1 * inputStream.close() 
1 * inputStream.read(...) 

。しかし、私が@CompileStaticを適用したとき、問題は戻ってきました。

+0

を提供してください[MCVE](http://stackoverflow.com/help/mcve)、 'GridFSFile'と'行う輸入とのすなわち完全なクラス( Image'など)、また完全なテストクラスです。文脈なしでスニペットを投稿するだけではなく、表示されないコードに問題がある可能性があります。 – kriegaex

+0

私はspockが '@ CompileStatic'と' @ TypeChecked'でも動作しないと思います。 – Opal

答えて

1

なぜ入力ストリームをモックする必要がありますか?

は、あなただけ行うことはできません。

given: 
byte[] byteList = "test data".bytes 
def gridFSDBFile = Mock(GridFSDBFile) 
def mongoImage = new MongoImage(gridFSDBFile) 

when: 
byte[] result = mongoImage.getBytes() 

then: 
1 * gridFSDBFile.getInputStream() >> new ByteArrayInputStream(byteList) 
0 * _ 
関連する問題