Grails: Keine Signatur der Methode findAll() ist anwendbar für die argument-Typen: String, ArrayList
Ich bin neu in grails und erhalten die folgende Fehlermeldung angezeigt:
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%]]"
Tritt der Fehler auf wenn ich test-app
. Es tritt in der folgenden Stelle:
SomethingVO[] findBySomeNumber(String searchString) {
searchString = "%"+searchString+"%"
return Something.findAll("from Something AS s WHERE s.some_number LIKE ?",[searchString]).collect {
new SomethingVO(it);
}
}
Klasse Something
ist ein domain-Objekt:
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)
}
}
Wo ist der Fehler???
(Ich benutze Grails 1.2.4)
InformationsquelleAutor hering | 2010-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
findAll ist nicht spotten während der unit-Tests und das ist, warum Ihr code nicht funktioniert. Müssen Sie manuell fügen Sie ein mock für den Aufruf vor der Ausführung des Tests (mockFor könnte helfen Sie mit, dass). Dies gilt, wenn Ihre Nutzung HQL oder Kriterien (die ich empfehlen würde, über die Reine HQL).
Alternativ ist es möglich, dass Sie könnte Ihre Probleme zu lösen mit dynamic finders. Dynamische Finder und die andere Dynamik ORM Methoden (speichern, abrufen, zählen, ..) sind in den meisten(?) Fällen verspottet, wenn Sie anrufen
mockDomain(Something)
in Ihrem Gerät testen. Sie sind auch in der Regel einfacher zu verwenden als HQL (imho).Update:
Dank Fletch für den Hinweis, dass nicht alle dynamischen findern werden verspottet. Ein Beispiel für eine dynamische finder, der nicht verspottet wird dies:
Something.findAllWhereSomeNumberInList([1, 2, 3])
.HQL, die Sie in Ihrem code könnte umgeschrieben werden, wie dies mit dynamischen Finder:
Gute Antwort, außer "Dynamic finders und der weiteren dynamischen ORM Methoden (speichern, abrufen, zählen, ..) sind alle verspottet, wenn Sie anrufen mockDomain(Etwas) in der unit test" ist nicht ganz richtig. Einige dieser Methoden sind zu, fehlt zum Beispiel FindAllWhereSomeNumberInList.
Danke Fletch, ich war nicht bewusst, dass das der Fall war. Ich werde aktualisieren, die Antwort zu reflektieren. Wollen Sie wissen, ob es eine gute Liste von dem, was funktioniert und was nicht? Zum hering: gerne helfen 🙂 ich weiß, wie schwer es sein kann, alle Informationen, die Sie benötigen, wenn Sie arbeiten mit einem neuen Rahmen.
InformationsquelleAutor xlson
Xlson s Antwort ist richtig, aber es gibt eine alternative "cutting-edge" - Lösung, die Sie versuchen können, die derzeit in der Test-status. Sehen http://grails.1312388.n4.nabble.com/New-approach-to-mocking-domain-classes-in-Grails-unit-tests-td2529895.html
Ich versuchte es, aber war nicht in der Lage, um es an die Arbeit. Viele Abhängigkeiten sind ungelöst. Ich bin versuchen zu testen, ein service, der hat einen findAll-mit einer einfachen Abfrage und einige der Sortierung und Paginierung. Was für eine Schande, dass dies nicht möglich zu testen 🙁
InformationsquelleAutor Fletch