2014-10-16 53 views
12
嘲笑一個靜態方法

我有一個靜態方法,它將從測試方法在一個類被調用爲波紋管如何從JMockit

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; 
    } 
} 

我想嘲笑編寫測試用例的方法methodToTest模擬方法。 嘗試作爲波紋管,並沒有給出任何輸出

@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()); 
} 

回答

23

嘲笑你的靜態方法:

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

嘲笑靜態私有方法:

@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()); 
} 

,通過javadoc:

Object mockit.Invocations.inv oke(Class methodOwner,String methodName,Object ... methodArgs)

指定對給定靜態方法的預期調用,以及給定的參數列表。