2016-03-24 8 views
0

Ich bin nicht in der Lage verspotten etwas (statisch oder nicht statischen Methoden) von Mockito zu verspotten,Mockito: Es kann keine statische und nicht-statische Methode

Das sind meine Klassen,

Calculations.java

public class Calculations { 

    public void printZero() { 
     System.out.println("zero"); 
    } 

    public static void printOne() { 
     System.out.println("one"); 
    } 
} 

Das ist mein PostData.java

public class PostData { 

    public static Calculations calc = new Calculations(); 
    public static void postTheData() { 

     calc.printZero(); 
     Calculations.printOne(); 
    } 
} 

Die Unit-Test-Klasse, TestClass.java

public class TestClass { 

    @Test 
    public void addTest() { 

     Calculations lmock = mock(Calculations.class); 

     // can't have Calculations.calc.printZero() in when() :cause: argument passes to when() must be a mock object. 
     doNothing().when(lmock).printZero(); 

     // cause: method when(void) is undefined for the type TestClass 
     // when(lmock.printZero()).doNothing(); 

     // cause: argument passed to when() must be a mock object. 
     // doNothing().when(Calculations.printOne()); 

     PostData.postTheData(); 
    } 
} 

Sein zusammengestellt und sein Druck „Null“ sowie „Eins“ in meiner Ausgabe, die im Idealfall ignoriert werden soll.

Ich verwende Cloud-Mockito-all-1.10.19.jar für Mockito. Und junits neueste JAR-Datei.

Ich weiß, ich vermisse hier etwas, aber kann nicht herausfinden, was! Es wäre eine große Hilfe, wenn Sie mir antworten können.

+0

Sie verwenden nicht die verspottete 'Calculations'-Klasse - Sie verwenden die statische in' PostData'. Sie müssen jedoch PowerMockito verwenden, um statische Methoden vorzutäuschen. –

+0

* "Ich kann nichts vorspielen (statische oder nicht statische Methoden) von Mockito" * Sie können also statische Methoden in Mockito vortäuschen, obwohl es nicht funktioniert und nicht unterstützt wird? Du brauchst zusätzliche Sachen wie PowerMock dafür. – Tom

Antwort

2

Das Problem ist, dass PostData nicht das verspottete Calculations Objekt verwendet.

Um dies zu tun, können Sie einen Setter für das Feld calc hinzufügen (und vielleicht ändern, um nicht statisch zu sein) und PostData 's Feld calc auf die mokierte setzen.

+0

Vielen Dank Bob! Eigentlich kann ich nichts in PostData.java hinzufügen, aber wie sich herausstellt, muss ich etwas hinzufügen (aus vielen - vielen Blogs, die ich gesehen habe). Danke für die Setter-Idee. Du bist großartig! –