Wie zum Hohn das 'new' - operator
Teste ich einige groovy-code, der verwendet, eine java-Bibliothek, und ich will mock aus der library aufrufen, da Sie das Netzwerk nutzen. Also der getestete code in etwa so aussieht:
def verifyInformation(String information) {
def request = new OusideLibraryRequest().compose(information)
new OutsideLibraryClient().verify(request)
}
Versuchte ich mit MockFor und StubFor aber ich bekomme Fehler wie:
No signature of method: com.myproject.OutsideLibraryTests.MockFor() is applicable for argument types: (java.lang.Class) values: [class com.otherCompany.OusideLibraryRequest]
Bin ich mit Grails 2.0.3.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den zweiten, optionalen parameter
MockFor
's Konstruktor istinterceptConstruction
. Wenn Sie dies auf true, können Sie mock-Konstruktor. Beispiel:Beachten Sie jedoch, Sie können nur spotten sich groovy-Objekte wie dieses. Wenn Sie fest sind, mit einem Java-Bibliothek, können Sie ziehen den Bau des Java-Objektes in einem factory-Methode und spotten, dass.
Habe ich gerade festgestellt, dass wir immer überschreiben ein Konstruktor, der über die Metaklasse, wie Grails 2 werden zurückgesetzt Metaklasse änderung am Ende von jedem test.
Dieser trick ist besser als Groovy ist
MockFor
. AFAIK, Groovy istMockFor
uns nicht erlauben, zu verspotten JDK-Klassen,java.io.File
zum Beispiel. Aber in dem Beispiel unten, können Sie nicht verwendenFile file = new File("aaa")
als das Reale Objekt Typ ist einMap
, nicht einFile
. Das Beispiel ist ein Spock-Spezifikation.@ConfineMetaClassChanges([File])
die Isolate der änderungen, die Sie anFile
'smetaClass
; siehe spockframework.org/spock/docs/1.1/...