Wie zum Hohn private-Methoden im controller in grails 2.2.4
Habe ich eine private Methode wurde verspottet in grails 1.3.7 mit metaclass aber jetzt, dass ich aktualisiert grails-version 2.2.4, die gleichen Spott fehlschlägt.
Methode zu testen, hat ein Aufruf der privaten Methode
private def MyPrivateMeth1(def arg1, def arg2) {
...
}
Spott ist so etwas wie das
MyController.metaClass.private.MyPrivateMeth1 = { a, b ->
...
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, den @TestFor Anmerkungen, die Ihnen die controller-variable. Sie können dann ändern Sie die Metaklasse, von, dass, als auch die Einbindung Kamil Mikolajczyk und araxn1d Vorschläge. So, Ihre gesamte test sollte wohl so Aussehen:
Stellen Sie sicher, dass def (oder String, Long, oder was auch immer die Erklärung, die Sie verwenden) auf die Argumente Ihrer mock-Methode genau, wie Sie auf die tatsächliche private Methode im controller, oder Ihre Prüfung versuchen, um die Klasse zu verwenden ist normal private Methode zuerst.
Hier einen ähnlichen test in Spock:
Es scheint, dass Sie brauchen, um zu erklären, Arten von closure-Argumenten (100%, wenn die, die Argumente haben, die tatsächlichen Typen, zum Beispiel
Long
, aber sicher nicht über def, aber Sie brauchen, um zu versuchen):Ich glaube, Sie brauchen nicht die
.private.
Teilsollten reichen, allerdings würde ich angeben, parameter-Typen explizit
Und, by the way, sollten Sie die java-Namenskonventionen - Methoden, sollten die Namen beginnen mit Kleinbuchstaben
Für unit-tests die ich verwendet habe-Reflexion für private Methoden. Etwas ähnliches wie das funktionieren sollte...
Bekommt man zuerst die Methode mit getDeclaredMethod Einstellung den Namen und die Parametertypen, Sie setzen es zu erreichen und schließlich tou rufen Sie es mit Methode.aufrufen, übergeben Sie das Objekt, das die Methode und die Parameter. Das Ergebnis ist ein Objekt, so dass Sie haben, um Sie zu wirken.
Ich weiß, es muss eine bessere Lösung, aber diese ist die einzige, die ich gefunden habe, das funktioniert
Bearbeiten: Sorry, was oben ist für einen Aufruf einer privaten Methode.
Ich denke, ich habe verspottet eine private Methode vor, einfach tun...
Genau wie Sie es geschrieben hat, aber ohne die .privat-und dem = - Zeichen. Auch, wie Kamil gesagt, sollten Sie java-Namenskonventionen für Methodennamen...