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.
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
Ich denke, Spock funktioniert nicht mit '@ CompileStatic' und' @ TypeChecked'. – Opal