2015-01-07 45 views
0

我試圖測試使用PowerMockito諜一些代碼,而我磕碰的方法(getRootTagMap - 見下文)(使用PowerMockito,因爲該方法是私有的)返回,在測試儀構建的價值我正在告訴PowerMockito間諜返回一個值,那麼爲什麼它調用實際的方法?

但是,不是返回值,而是始終調用實際方法,而不是返回構造的值。

不知道我在做什麼錯

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

import static org.powermock.api.mockito.PowerMockito.spy; 


@RunWith(PowerMockRunner.class) 
@PrepareForTest({JsonAppMessageProcessor.class}) 
public class TestPropStoreAppController { 
    @Test public void testSaveJsonAppTagChangesToPropStore() throws Exception { 
     JsonAppMessageProcessor messageProcessorSpy = spy(new JsonAppMessageProcessor()); 
     when(messageProcessorSpy, "getRootTagMap", any(JsonAppTag.class)).thenReturn(constructReturnValue()); 
     // I tried it this way too... 
     // doReturn(constructReturnValue()).when(messageProcessorSpy, "getRootTagMap", any(JsonAppTag.class)); 
     // the following call calls the real getRootTagMap(JsonAppTag) method instead of returning the stub 
     messageProcessorSpy.saveChanges(constructParameterForChanges()); 
    } 
} 
+0

你有沒有發現問題是什麼?我現在有同樣的問題,不知道該怎麼辦.. https://stackoverflow.com/questions/38155092/powermockito-is-calling-the-method-when-i-use-doreturn-when – Ahmad

回答

1

我不知道什麼是你正在使用的PowerMockito版本,但以下情形適用於我:

doReturn(constructReturnValue()).when(messageProcessorSpy).getRootTagMap(any(JsonAppTag.class)); 

方法的調用你是在嘲笑間諜對象應該在由when方法返回的實例中調用,而不是像在常規模擬對象中那樣調用該對象。

相關問題