簡體   English   中英

JUnit,Mockito和Powermock訪問受保護的本地方法

[英]JUnit, Mockito and Powermock to access protected, local method

我必須在一個類中測試一個方法。 但是類本身具有一些繼承和保護的內部屬性和方法。

如果有的話,我所擁有的是:

public class MyActionTest {
    @Test
    public void goToSearchBaseTest() {
        MyAction myAction = new MyAction();
        myAction.search();
        assert (true);
    }

}

然后

public class MyAction extends BaseAction{

    ...

    public ActionForward search(){

        if(this.getLog().isDebugEnabled()) {
            this.getLog().debug("init --> search()");
        }
    }

}

最后

public class BaseAction{    

    ...

    protected Log log;

    ...

    public ActionForward execute( ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response ) 
                throws Exception {
        ...

        log = LogFactory.getLog( this.getClass() );

        ...
}

因此,我的小測試在第一行中斷了:嘗試訪問記錄器,但我無法訪問它(也沒有放置模擬記錄器),因為它是在父類中創建的,之前是無法修改的。

我通常的JUnit和Mockito技巧還不夠,而且我對powermock的了解不多

有人可以幫我嗎?

試試看

@RunWith(PowerMockRunner.class)
@PrepareForTest(LogFactory.class)    
public class MyActionTest {

    @InjectMocks
    MyAction myAction ;
    @Mock
    Log log

    public void setUp() throws Exception {
        PowerMockito.mockStatic(LogFactory.class);
        PowerMockito.when(LogFactory.getLog(any(BaseAction.class))).thenReturn(log);


        @Test
        public void goToSearchBaseTest() {
            myAction.search();
            assert (true);
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM