我在grails 3.1.7中对spock单元测试进行模拟InputStream
时遇到问题。
我在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 * _
此测试执行属于无限调用:
1 * inputStream.close()
1 * inputStream.read(...)
对于我之前的问题,将Mock(InputStream)
替换为GroovyMock(InputStream)
即可解决问题。但是当我应用@CompileStatic
时,问题又回来了。
答案 0 :(得分: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 * _
答案 1 :(得分:0)
我遇到了同样的问题。当我删除 @CompileStatic
能够模拟类。
所以我在编译时为类型检查添加了 @TypeChecked
注解