2017-03-25 2 views
1

Ich habe einen Code:Spock spöttische input verursacht Endlosschleife

gridFSFile.inputStream?.bytes 

Wenn ich versuche, es auf diese Weise zu testen:

given: 
def inputStream = Mock(InputStream) 
def gridFSDBFile = Mock(GridFSDBFile) 
List<Byte> byteList = "test data".bytes 
... 
then: 
1 * gridFSDBFile.getInputStream() >> inputStream 
1 * inputStream.getBytes() >> byteList 
0 * _ 

Das Problem ist, dass inputStream.read(_) unendlich oft genannt wird. Wenn ich die 0 * _ entfernen - der Test hängt, bis Garbage Collector stirbt.

Bitte geben Sie an, wie ich die InputStream richtig vortäuschen kann, ohne in Endlosschleifen zu fallen, d. H. Um die obige Zeile mit 2 (oder ähnlichen) Interaktionen zu testen.

Antwort

1

Der folgende Test funktioniert:

import spock.lang.Specification 

class Spec extends Specification { 

    def 'it works'() { 
     given: 
     def is = GroovyMock(InputStream) 
     def file = Mock(GridFile) 
     byte[] bytes = 'test data'.bytes 

     when: 
     new FileHolder(file: file).read() 

     then: 
     1 * file.getInputStream() >> is 
     1 * is.getBytes() >> bytes 
    } 

    class FileHolder { 
     GridFile file; 

     def read() { 
      file.getInputStream().getBytes() 
     } 
    } 

    class GridFile { 
     InputStream getInputStream() { 
      null 
     } 
    } 
} 

nicht 100% sicher darüber, aber es scheint, dass Sie GroovyMock hier verwenden müssen, da getBytes eine Methode dynamisch durch groovy hinzugefügt. Schauen Sie sich here an.

+1

Danke! 'GroovyMock' hat funktioniert! –

Verwandte Themen