Как издеваться над учеником в классе, который вы шпионите с помощью powermockito - PullRequest
1 голос
/ 01 ноября 2019

Как я могу издеваться над классом-членом другого класса, который уже был подсмотрен PowerMockito.spy ()?

@Component
public class BoxFileDao {

    @Autowired
    private BoxFileService boxFileService;

    public void uploadFile() {
         .....
         boxFileService.uploadFile(user, credential);
    }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(BoxFileDao.class)
public class BoxFileDaoTest {
    @Test
    public void testUploadFile() {
        BoxFileDao mock = PowerMockito.spy(new BoxFileDao());
        (how do I get the boxFileService from mock?)
        mock.uploadFile();
        verify(boxFileService).uploadFile(user, credential);
    }
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете использовать @InjectMock, чтобы ввести поддельный объект boxFileService в реальный объект boxFileDao. Ваш тестовый класс может быть написан что-то вроде

@RunWith(PowerMockRunner.class)
public class BoxFileDaoTest {

    @Mock
    private BoxFileService boxFileService;

    @InjectMocks
    private BoxFileDao boxFileDao;

    @Test
    public void testUploadFile() {
        boxFileDao.uploadFile();
        verify(boxFileService).uploadFile(user, credential);
    }
}
0 голосов
/ 01 ноября 2019

Сначала вы создаете тестируемый класс BoxFileDao, вливая в него макет для boxFileService. После этого вы можете создать на нем шпиона.

Например:

BoxFileDao dao = new BoxFileDao();
dao.boxFileService = Mockito.mock(BoxFileService.class);

BoxFileDao spy = Mockito.spy(dao);

Но вопрос в том, почему вы вообще хотите это делать? Есть ли причина шпионить за BoxFileDao, вашим классом в процессе тестирования?

...