gpt4 book ai didi

java - UnitTest (groovy + grails) - 无法拆卸元类

转载 作者:行者123 更新时间:2023-11-30 09:23:48 25 4
gpt4 key购买 nike

我在尝试打扫类时遇到了问题。

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

}

最佳答案

我遇到了类似的问题 (Grails 2.2.0),我可以按照以下方法解决它:

  1. 在测试方法的最后使用GroovySystem.metaClassRegistry.removeMetaClass(FileObject.class)来拆除

  2. 在测试类 tearDown() 中使用 FileObject.metaClass = null

我仍然想知道为什么我们需要同时使用这两个 tearDown。

注意:- 在我的例子中,我将 Groovy 对象与 Java 对象进行了元分类。

关于java - UnitTest (groovy + grails) - 无法拆卸元类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15936329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com