2014-10-16 4 views
12

Ich habe eine statische Methode, die von Testverfahren in einer Klasse wie seinen Aufruf untenWie eine statische Methode von JMockit verspotten

public class MyClass 
{ 
    private static boolean mockMethod(String input) 
    { 
     boolean value; 
     //do something to value 
     return value; 
    } 

    public static boolean methodToTest() 
    { 
     boolean getVal = mockMethod("input"); 
     //do something to getVal 
     return getVal; 
    } 
} 

Ich mag methodToTest einen Testfall für die Methode schreiben von spöttischen mockMethod. als Gebrüll versucht und es keine Ausgabe

@Before 
public void init() 
{ 
    Mockit.setUpMock(MyClass.class, MyClassMocked.class); 
} 

public static class MyClassMocked extends MockUp<MyClass> 
{ 
    @Mock 
    private static boolean mockMethod(String input) 
    { 
     return true; 
    } 
} 

@Test 
public void testMethodToTest() 
{ 
    assertTrue((MyClass.methodToTest()); 
} 

Antwort

23

Um Ihre statische Methode spotten nicht geben:

new MockUp<MyClass>() 
{ 
    @Mock 
    boolean mockMethod(String input) // no access modifier required 
    { 
     return true; 
    } 
}; 
5

Um die statische private Methode zu spotten:

@Mocked({"mockMethod"}) 
MyClass myClass; 

String result; 

@Before 
public void init() 
{ 
    new Expectations(myClass) 
    { 
     { 
      invoke(MyClass.class, "mockMethod", anyString); 
      returns(result); 
     } 
    } 
} 

@Test 
public void testMethodToTest() 
{ 
    result = "true"; // Replace result with what you want to test... 
    assertTrue((MyClass.methodToTest()); 
} 

Von JavaDoc:

Objekt mockit.Invocations.inv oke (Klasse methodOwner, String methoden, Objekt ... methodArgs)

Gibt einen erwarteten Aufruf zu einer gegebenen statischen Methode, mit einer gegebenen Liste von Argumenten.