2010-02-26 18 views

Antwort

26

Ich verstehe nicht ganz, welches Problem Sie mit Mockito haben. Angenommen, Sie sind ein Modell der Schnittstelle erstellen, die Ihre myMethod() Methode enthält, können Sie dann sicher, nur die Parameter der Methode, die Sie interessiert sind beispielsweise (die Schnittstelle unter der Annahme, heißt MyInterface und mit JUnit 4):.

@Test 
public void test() { 
    MyInterface myInterface = mock(MyInterface.class); 
    FooBar expectedFooBar = new FooBar();   

    // other testing stuff 

    verify(myInterface).myMethod(any(), any(), eq(expectedFooBar), any(), ...); 
} 

Sie müssen einen statischen Import der Mockito-Methoden durchführen, damit dies funktioniert. Dem any() Matcher ist es egal, welcher Wert bei der Überprüfung übergeben wurde.

Sie können nicht vermeiden, etwas für jedes Argument in Ihrer Methode zu übergeben (auch wenn es nur NULL ist).

+1

Ich denke, er möchte wirklich myMethod() aufrufen, also muss er all diese Parameter jedes Mal übergeben, was den Test aufbläht. –

+0

Ich teste einen Controller und stemple meine Service-Methode. der Dienst wird verspottet. Ich denke, die any() sollte funktionieren. Vielen Dank –

3

eine Wrapper-Klasse erstellen, die die reale Methode aufruft und füllt in allen anderen Argumenten, aber die, die Sie (a.k.a "Delegation") liefern.

Und bei der nächsten Gelegenheit, einen Fehler gegen das Projekt einreichen, um die Parameter zu einem Konfigurationsobjekt zu verschieben.

+4

Wahr - zu viele Parameter auf einer Methodensignatur sind ein schlechter Code "Geruch". – SteveD

+0

Ich habe 5 Parameter, und ja, sie sind erforderlich :) Es ist eine Service-Methode, die ich versuche zu stumm. Ich wollte nur theoretisch für Methoden sein, bei denen Sie die Parameter nicht wirklich stubben wollen. –

+0

Das Problem mit "einer Million" Argumenten scheint ein sehr häufiges Problem mit vielen SOAP-Diensten zu sein. #fail – Kimble

10

Verwendung mockito.any

wenn myobj mymethod akzeptiert string, string, eine Bar zum Beispiel

einen Anruf

Mockito.verify(myojb).myMethod(
    Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class))); 

Mockito.when(myojb.myMethod(Mockito.anyString(),Mockito.anyString(),Mockito.any(Bar.class))) 
    .thenReturn(amockedobject); 

zu überprüfen SteveD gab die Antwort bereits Stummel