我正在尝试使用groovy的a = 1988
a[2] = TypeError
str(a)[2] = '8' # yey
约定来模拟静态方法readAttributes
,但是会调用真正的方法。
这就是我嘲笑静态函数的方法:
metaClass
我在这里做错了吗?
我的java方法
def "test"() {
File file = fold.newFile('file.txt')
Files.metaClass.static.readAttributes = { path, cls ->
null
}
when:
fileUtil.fileCreationTime(file)
then:
1 * fileUtil.LOG.debug('null attribute')
}
答案 0 :(得分:3)
简短的回答是,这是不可能的,请查看this问题。
如果有:
解决方法是提取将属性返回给另一个类的逻辑,该类将被模拟而不是直接使用Files
。
答案 1 :(得分:3)
我使用一级间接解决了这个问题。我创建了一个test class
的实例方法,它就像这个静态调用的包装器一样。
public BasicFileAttributes readAttrs(File file) throws IOException {
return Files.readAttributes(file.toPath(), BasicFileAttributes.class);
}
从测试中我模拟了实例方法。
FileUtil util = Spy(FileUtil);
util.readAttrs(file) >> { null }
解决了我的问题。
答案 2 :(得分:0)
您可以为此使用GroovySpy,如spock documentation
所述在您的情况下,它将是:
def filesClass = GroovySpy(Files, global: true)
filesClass.readAttributes(*_) >> null