簡體   English   中英

如何使用Mockito模擬注入對象的屬性

[英]How to mock an attribute of an injected object using mockito

我想測試方法deleteTracks ,為此,我需要模擬一個在調用playlistDaoBean.getPlaylistByUUID(uuid)之后檢索的playlistDaoBean.getPlaylistByUUID(uuid)

public class PlaylistBusines {

private PlaylistDao playlistDao;

@Inject
public PlaylistBusinessBean(PlaylistDaoBean playlistDaoBean){
    this.playlistDaoBean = playlistDaoBean;
}

List<PlayListTrack> deleteTracks(String uuid, List<Integer> indexes) throws PlaylistException {


    PlayList playList = playlistDaoBean.getPlaylistByUUID(uuid);
    // TODO

}

這是我的課堂測試:

public class PlaylistBusinessTest {

    @Inject
    PlaylistBusinessBean playlistBusinessBean;


     @Test
    public void testRemoveTracks() throws Exception {

    PlayList playList = new PlayList();
    playList.setId(222)
    playList.setName("fake name");


    PlaylistDaoBean playlistDaoBeanMock = mock(PlaylistDaoBean.class);
    when(playlistDaoBeanMock.getPlaylistByUUID(uuid)).thenReturn(playList);


    playlistBusinessBean.removeTracks(uuid, Arrays.asList(2, 3));


    }

被測實例(PlaylistBusinessBean)由DI框架注入。 但是,那是不使用測試中創建的PlaylistDaoBean的模擬。 模擬只是局部變量,在任何地方都沒有使用。

與其使用注入的PlaylistBusinessBean實例,不如通過編程方式創建一個實例並將PlaylistDaoBean模擬傳遞給它:

public class PlaylistBusinessTest {

     @Test
    public void testRemoveTracks() throws Exception {

    PlayList playList = new PlayList();
    playList.setId(222)
    playList.setName("fake name");


    PlaylistDaoBean playlistDaoBeanMock = mock(PlaylistDaoBean.class);
    when(playlistDaoBeanMock.getPlaylistByUUID(uuid)).thenReturn(playList);

    PlaylistBusinessBean playlistBusinessBean = new PlaylistBusinessBean(playlistDaoBeanMock);

    playlistBusinessBean.removeTracks(uuid, Arrays.asList(2, 3));


    }

一般注意事項:

  • 這是一個單元測試,因此我總是建議您獨立於DI和任何注入的代碼獨立地測試代碼。
  • 但是,如果確實需要,通常還可以使用特定於測試的DI上下文,該上下文在需要時將模擬注入到受測試的bean。 該如何做取決於所使用的DI。

這不起作用的原因是您沒有將模擬作為參數提供給PlaylistBusines。

值得提供錯誤,但是您定義行為的模擬程序永遠不會在被測類中使用。

暫無
暫無

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

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