2016-08-09 115 views
2

Ich habe einen abstrakten Service:Groovy metaclass, eine Service-Methode spöttisch, die hat throws-Klausel

abstract class ParentService {  
    abstract Map someMethod() throws NumberFormatException  
} 

Und eine anderen Dienst, die über Klasse erweitert:

class ChildService extends ParentService { 
    @Override   
    Map someMethod() throws NumberFormatException { 
     //Business Logic 
    } 
} 

I someMethod() mit groovy Metaklasse verspotten wollen . Ich muss diese Methode zum Schreiben von Testfällen für ChildService verspotten. Dies ist, was ich getan habe, um zu spotten:

ChildService.metaClass.someMethod = { -> "Mocked method" }
Aber das funktioniert nicht und der Aufruf führt immer aktuelle Methode aus dem Dienst. Was muss hier gemacht werden? Fehle ich etwas?
Bitte beachten Sie, dass ich nur eine Methode verspotten muss, nicht den gesamten Service.

Antwort

0

Vielleicht könnten Sie nur Methode auf Instanz vortäuschen?

def child = new ChildService() 
child.metaClass.someMethod = { -> "Mocked method" } 
+0

Ich versuchte das auch, aber kein Glück. – UjjawalG

+0

Ich habe versucht, es zu reproduzieren und es funktionierte, also Grund, warum es nicht funktioniert, muss woanders sein. Können Sie Ihre gesamte Testmethode zeigen? Sie können auch versuchen, die "Mocked-Methode" zu ändern. Vielleicht funktioniert es nicht, weil die Rückgabetypen nicht übereinstimmen? –