| 

.NET C# Java Javascript Exception

addToBooks() is applicable for argument types: (myapp.Book)

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


addToBooks() is applicable for argument types: (myapp.Book)

MehrCurry - 25.08.2010 10:47
Hallo Leute,

nach längerer Zeit wollte ich mal wieder mit Grails rumspielen und habe nochmal bei Adam und Eva angefangen, sprich das Book/Author Beispiel nachprogrammiert. Und da gehts schon schief. Irgendwie tut addToBooks(...) nicht das, was es soll:

class Author {
	String name
	static hasMany = [books:Book]
    static constraints = {
    }
}

class Book {
	String title
    static constraints = {
    }
}

Folgender Test wirft mit einer Exception nach mir:
    void testSomething() {
		def a = new Author(name:"Hans Wurst")
		assert a != null
		
		def aBook = new Book(title:"Neues Buch")
		assert aBook != null
		a.addToBooks(aBook)
    }

Die letzte Zeile wirft:
No signature of method: myapp.Author.addToBooks() is applicable for argument types: (myapp.Book) values: [myapp.Book : null] Possible solutions: getBooks()

groovy.lang.MissingMethodException: No signature of method: myapp.Author.addToBooks() is applicable for argument types: (myapp.Book) values: [myapp.Book : null]
Possible solutions: getBooks()
at myapp.AuthorTests.testSomething(AuthorTests.groovy:20)

Hat jemand nen Tipp?


Re: addToBooks() is applicable for argument types: (myapp.Book)

milkyman - 25.08.2010 11:16
Auch wenn die Fehlermeldung nicht in die Richtung deutet, versuch mal ein a.save() bevor du das Buch zuordnest.

Bye,
Horst


Re: addToBooks() is applicable for argument types: (myapp.Book)

mpuhlmann - 25.08.2010 12:49
Hallo,

ich vermute mal folgendes:

1.) Du hast die Domain-Klassen via grails create-domain-class ... erzeugt, wobei hier zwei Unit-Test Klassen erzeugt werden.
2.) Du hast die Domain-Klassen sowie den Test AuthorTests entsprechend Beitrag angepasst.
3.) Du hast den Test ausgeführt --> Fehlermeldung

Und in diesem Ablauf gibt es ein kleines "Problem". Tests für Domain-Klassen werden durch das Grails-Skript als Unit-Test (im Verzeichnis test/unit) erzeugt. Dies bedeutet allerdings, dass ein Großteil der Grails Magie im Rahmen der Test-Ausführung nicht zur Verfügung steht. Hierzu zählt auch die Erweiterung der Domain-Klassen um GORM spezifische Methoden (dynamische Finder-Methoden, Methoden zur Verwaltung der Relationen, etc.).

Somit kann die Methode addToBooks innerhalb des Unit-Tests nicht gefunden werden.

Als Lösung bietet sich das Verschieben des Tests in das Verzeichnis test/integration an. Diese sogenannten Integrationstests werden inklusive Anbindung an DB etc. ausgeführt. Somit stehen hier auch die Grails Erweiterungen wie GORM, TagLib Test Support, etc. zur Verfügung.

Eine kurze Einleitung in Unit/Integrationstests bei Grails findest du hier.

Ich hoffe, dass dir die Ausführung weiterhelfen konnte.

Gruss

Marco


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "addToBooks() is applicable for argument types: (myapp.Book)" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.