我在嘗試清理類時出現問題。UnitTest(groovy + grails) - 無法拆卸元類
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)
}
當我在一次運行一個,他們的工作很好,但如果我在同時運行,存在()總是返回true(如果我改變了虛假的第一.metaclass,它返回false) 。所以我認爲它並沒有拆除元類。
類擴展GroovyTestCase的,我檢查了我要補充:
def remove = GroovySystem.metaClassRegistry.&removeMetaClass
remove FileObject
但它不工作。
請幫忙!
編輯:
我使用Grails 1.3.7和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嗎? – 2013-04-11 02:10:42
您是否嘗試過在拆卸方法中將FileObject的元類設置爲null而不是通過元類註冊表?將其設置爲空應該將其重置爲其默認行爲,然後每個測試都應正確覆蓋它。 – 2013-04-11 12:58:14
我剛剛嘗試過,但不起作用。 – 2013-04-11 13:39:15