2013-04-18 10 views
6

Ich kann nicht herausfinden, wie man eine einfache Setter-Methode mit Mockito verspottet. Ich habe die folgende Klasse:Wie überschreiben Sie eine Setter-Methode in Mockito?

class MyClass { 
    private SomeObject someObject; 

    public void setSomeObject(SomeObject someObject) { 
     this.someObject = someObject; 
    } 

    public someObject getSomeObject() { 
     return someObject; 
    } 
} 

Jetzt habe ich nur wollen, dass, wenn „setSomeObject“ genannt wird, dass eine neue Instanz von „Someobject“ gesetzt ist. Auch der Parameter innerhalb des Setter sollte ignoriert werden.

Ich brauche etwas wie folgt aus:

MyClass mockedClass = mock(MyClass.class); 
when(mockedClass.setSomeObject([ignoreWhatsInHere])) 
    .then(mockedClass.setSomeObject(new SomeObject(); 

Allerdings kann ich nicht scheinen, um die Syntax arbeiten dafür zu bekommen. Ich kann die Mocks nur mit gotters() arbeiten lassen, weil ich dann etwas zurückgeben kann. Aber ich kann nicht herausfinden, wie das Gleiche für Setter() zu tun ist.

Alle Hilfe wird geschätzt.

+0

Warum brauchen Sie es? Was genau willst du erreichen? – axtavt

+0

hmm das funktioniert nicht, da es sagt, dass eine Rückgabe nicht für void gilt:/ – Lonelyisland

+0

gut ist die Sache, die das SetSomeObject() wird irgendwie so genannt: myClass.setSomeObject (someWeirdFunction.whichreturnsfinallySomeObject()). Eigentlich möchte ich nur wissen, ob ein Ruf an den Setter besteht, und setze das Objekt selbst. – Lonelyisland

Antwort

5

Sie sollten die Methodenfamilie doThrow()|doAnswer()|doNothing()|doReturn() verwenden können, um beim Testen von Methoden, die void einschließlich Setter zurückgeben, eine geeignete Aktion durchzuführen. Also statt

when(mockedObject.someMethod()).thenReturn(something) 

würden Sie doAnswer() verwenden, um eine benutzerdefinierte Antwort Objekt zurück, obwohl es nicht sehr elegant ist, und man könnte einen Stub sein besser mit:

doAnswer(new Answer() { 
    public Object answer(InvocationOnMock invocation) { 
      //whatever code you want to run when the method is called 
      return null; 
    }}).when(mockedObject).someMethod(); 
} 

Wenn Sie zurück versuchen Wenn Sie verschiedene Werte von demselben Getter-Aufruf verwenden, sollten Sie sich auch die fortlaufenden Stubbing-Aufrufe von Mockito ansehen, mit denen Sie beispielsweise einen Fehler für den ersten Aufruf einer Methode ausgeben und dann ein Objekt vom zweiten Aufruf zurückgeben können.

siehe http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#12 für weitere Details zu diesen beiden.

Verwandte Themen