2017-04-10 1 views
0

Ich habe Probleme mit dem Spott InputStream in Grails 3.1.7 für Spock-Unit-Tests.Spock mocking inputStream verursacht Endlosschleife p2

Ich fragte ähnliche Frage vor link.

Ein Problem wurde behoben, aber wenn ich @CompileStatic Annotation hinzugefügt habe, kehrte es zurück. Mein Code:

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

Mein Test:

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 * _ 

Dieser Test Ausführung fällt in den unendlichen Aufruf:

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

Für meine vorherige Frage es durch den Ersatz Mock(InputStream) zu GroovyMock(InputStream) gelöst wurde. Aber als ich @CompileStatic anwendete, kehrte das Problem zurück.

+0

Bitte geben Sie eine [MCVE] (http://stackoverflow.com/help/mcve), dh volle Klassen mit Importen (wo tun 'GridFSFile' und' Bild 'kommen aus, zum Beispiel?) Und auch eine volle Testklasse. Bitte schreiben Sie nicht nur Snippets ohne Kontext, das Problem könnte in dem Code liegen, den Sie nicht anzeigen. – kriegaex

+0

Ich denke, Spock funktioniert nicht mit '@ CompileStatic' und' @ TypeChecked'. – Opal

Antwort

1

Warum brauchen Sie den Inputstream zu verspotten?

Kannst du nicht einfach tun:

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 * _ 
Verwandte Themen