Grails:没有方法findAll()的签名适用于参数类型:String、ArrayList

Grails:没有方法findAll()的签名适用于参数类型:String、ArrayList,grails,groovy,gorm,findall,Grails,Groovy,Gorm,Findall,我是grails新手,收到以下错误: 没有方法签名:Something.findAll()适用于参数类型:(java.lang.String,java.util.ArrayList)值:[来自s,其中s.some_数字,如?,[%asdf%]]” 运行测试应用程序时发生错误。错误发生在以下位置: SomethingVO[] findBySomeNumber(String searchString) { searchString = "%"+searchString+"%" r

我是grails新手,收到以下错误:
没有方法签名:Something.findAll()适用于参数类型:(java.lang.String,java.util.ArrayList)值:[来自s,其中s.some_数字,如?,[%asdf%]]”

运行
测试应用程序时发生错误。错误发生在以下位置:

SomethingVO[] findBySomeNumber(String searchString) {
     searchString = "%"+searchString+"%"
     return Something.findAll("from Something AS s WHERE s.some_number LIKE ?",[searchString]).collect { 
          new SomethingVO(it);    
     }
}  
Something
是一个域对象:

package some.project.domain

    class Something{

        static belongsTo = [product:Product, productVersion:ProductVersion]

        Long id
        String name
        String someNumber

        static constraints = {
            product (nullable:true)
            productVersion (nullable:true)
        }
    }  
错在哪里


(我使用Grails 1.2.4)

findAll在单元测试期间不会被模拟,这就是代码无法工作的原因。在运行测试之前,您需要手动为调用添加模拟(mockFor可以帮助您)。如果您使用HQL或Criterias(我建议不要使用纯HQL),这一点适用

或者,您也可以使用动态查找器解决问题。在大多数情况下,当您在单元测试中调用
mockDomain(Something)
时,动态查找器和其他动态ORM方法(save、get、count等)都会被模拟。它们通常也比HQL(imho)更易于使用

更新: 感谢Fletch指出并非所有的动态查找器都是模拟的。不被模拟的动态查找器的一个例子是:
Something.findAllWhereSomeNumberInList([1,2,3])

您在代码中使用的HQL可以使用动态查找器像这样重写:

Something.findBySomeNumberLike(searchString)

Xlson的答案是正确的,但是您可以尝试另一种“尖端”解决方案,该解决方案目前处于测试状态。请参阅

伟大而快速的答案。非常感谢!回答很好,除了“动态查找器和其他动态ORM方法(保存、获取、计数……)在调用mockDomain(某物)时都会被模拟。”在单元测试中“这并不完全正确。其中一些方法也缺失了,例如FindAllWhereSomeNumberInList。谢谢Fletch,我不知道是这样的。我将更新答案以反映这一点。你知道有没有什么好的清单,列出哪些有效,哪些无效?对赫林说:很高兴能帮上忙:)我知道在使用新框架时要找到所需的所有信息有多难。我没有意识到这一点,我会检查一下。谢谢你的提示!我试过了,但没能成功。很多依赖关系都没有解决。我试图测试一个服务,它有一个findAll,带有一个简单的查询和一些排序和分页。很遗憾,这无法测试:(