2014-07-04 66 views
0

我正在爲遺留代碼編寫java單元測試,我也是這方面的新手。我必須測試以下場景(編寫testableMethod()的單元測試用例)。所以,沒有執行代碼在getMode()方法裏面,我想爲mode變量得到一個值。PowerMockito:嘲諷私有方法,並獲得一個值,但不訪問它

Class A{ 

public boolean testableMethod() 
{ 
    //code 
    ...... 
    int mode = getMode(); 
    ...... 
    //do something with mode 
    return X; 
} 

private int getMode() 
{ 
    return ComplexCalls(ComplexMethodCalls(), more()); 
} 

} 

我試圖用PowerMockito做到這一點,但沒有取得成功。 PowerMockito可以模擬這種場景嗎?

回答

5

您可以與PowerMockito間諜:

public class A { 
    public boolean testableMethod() { 
     return getMode() == 1; 
    } 

    private int getMode() { 
     return 5; 
    } 
} 

import static org.junit.Assert.assertTrue; 
import static org.powermock.api.mockito.PowerMockito.doReturn; 
import static org.powermock.api.mockito.PowerMockito.spy; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(A.class) 
public class ATest { 
    @Test 
    public void testableMethod_should_do_this() throws Exception { 
     A a = spy(new A()); 

     doReturn(1).when(a, "getMode"); 

     assertTrue(a.testableMethod()); 
    } 
} 

看到這一切full example of partial mocking of a private method

+0

我已經嘗試了這種情況。我使用eclipse IDE調試執行。在這種情況下,調試指針進入getMode()方法,該方法具有非常複雜的代碼來測試和出錯。 – Madhujith

+0

好吧,我已經更新了我的答案。 – gontard

+0

謝謝!它的作品:) – Madhujith