Grails: нет сигнатуры метода findAll () для типов аргументов: String, ArrayList

Я новичок в Grails и получаю следующую ошибку:
No signature of method: Something.findAll() is applicable for argument types: (java.lang.String, java.util.ArrayList) values: [from Something AS s WHERE s.some_number LIKE ?, [%asdf%]]"

Ошибка возникает при запускеtest-app, Это происходит в следующем месте:

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)

Ответы на вопрос(2)

однако есть альтернативное «передовое» решение, которое вы можете попробовать, которое в настоящее время находится в состоянии тестирования. Увидетьhttp://grails.1312388.n4.nabble.com/New-approach-to-mocking-domain-classes-in-Grails-unit-tests-td2529895.html

 xlson21 сент. 2010 г., 12:44
Я не знал об этом, придется проверить это. Спасибо за чаевые!
 hering21 сент. 2010 г., 13:49
Я попробовал, но не смог заставить его работать. Многие зависимости не разрешены. Я пытаюсь протестировать сервис, который имеет findAll с простым запросом и некоторой сортировкой и разбиением на страницы. Какой позор, что это невозможно проверить :(
Решение Вопроса

и поэтому ваш код не работает. Вам нужно вручную добавить макет для вызова перед запуском теста (mockFor может помочь вам в этом). Это применимо, если вы используете HQL или Критерии (которые я бы рекомендовал вместо чистого HQL).

В качестве альтернативы возможно, что вы могли бы решить свои проблемы с помощью динамических искателей. Динамические искатели и другие динамические методы ORM (save, get, count, ..) в большинстве случаев (?) Высмеиваются при вызовеmockDomain(Something) в вашем модульном тесте. Они также, как правило, проще в использовании, чем HQL (imho).

Обновить: Спасибо Флетчу за то, что он указал, что не все динамические искатели насмехаются. Пример динамического поиска, который не будет посмеяться, это:Something.findAllWhereSomeNumberInList([1, 2, 3]).

HQL, который вы используете в своем коде, можно переписать с помощью динамических искателей:

Something.findBySomeNumberLike(searchString)
 hering21 сент. 2010 г., 10:45
отличный и быстрый ответ. Большое спасибо!
 Fletch21 сент. 2010 г., 10:58
Хороший ответ, за исключением того, что «Динамические искатели и другие динамические методы ORM (save, get, count, ..) все высмеиваются при вызове mockDomain (Something) в модульном тесте» не совсем верны. Некоторые из этих методов также отсутствуют, например FindAllWhereSomeNumberInList.
 xlson21 сент. 2010 г., 12:30
Спасибо, Флетч, я не знал, что это так. Я обновлю ответ, чтобы поразмышлять над этим. Знаете ли вы, есть ли хороший список того, что работает, а что нет? К счастью: рад помочь :) Я знаю, как трудно найти всю необходимую информацию для работы с новым фреймворком.

Ваш ответ на вопрос