【发布时间】:2013-04-02 21:54:46
【问题描述】:
我在尝试清理班级时遇到问题。
void testFileExists() {
FileObject file = EasyMock.createMock(FileObject.class)
VfsFileSystemManager.metaClass.getFile = {String s, String a ->return file}
FileObject.metaClass.exists = {-> return true}
assertEquals true, siteManagerHelper.fileExists(STRING, STRING)
}
void testFileNotExists() {
FileObject file = EasyMock.createMock(FileObject.class)
VfsFileSystemManager.metaClass.getFile = {String s, String a ->return file}
FileObject.metaClass.exists = {-> return false}
assertEquals false, siteManagerHelper.fileExists(STRING, STRING)
}
当我同时运行一个时,它们工作正常,但如果我同时运行两个,exists() 总是返回 true(如果我将第一个 .metaclass 更改为 false,它返回 false)。所以我认为它不会破坏元类。
该类扩展了 GroovyTestCase,我检查了是否应该添加:
def remove = GroovySystem.metaClassRegistry.&removeMetaClass
remove FileObject
但它不起作用。
请帮忙!
编辑:
我正在使用 grails 1.3.7 和 groovy 1.6.8
private boolean fileExists(String path, String file){
if(path != null && path != ""){
FileObject fileToCheck = fsManager.getFile(path, file)
boolean fileExists = fileToCheck.exists()
logger.debug "File exists? ${fileExists}"
return fileExists
}
logger.debug "The path is null or empty"
return false
}
【问题讨论】:
-
你能展示一下 fileExists() 方法吗?您使用的是 Grails 2.x 吗?
-
您是否尝试过在您的拆卸方法中将 FileObject 的元类设置为空,而不是通过元类注册表?将其设置为 null 应将其重置为其默认行为,然后每个测试都应正确覆盖它。
-
我刚试过,但它不起作用。
标签: java unit-testing grails groovy metaclass