[英]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));
}
一般注意事項:
這不起作用的原因是您沒有將模擬作為參數提供給PlaylistBusines。
值得提供錯誤,但是您定義行為的模擬程序永遠不會在被測類中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.