Исключение Мокито в классе - PullRequest
1 голос
/ 18 апреля 2020

Я высмеял класс Jsch () и получил исключение приведения класса в следующем методе.

Оригинальный метод.

JSch jsch = getSftpJsch();
session = jsch.getSession(sessionObj);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
LOGGER.info("sfg channel opened and connected.");
channelSftp = (ChannelSftp) channel;
channelSftp.cd(inboundPath);
Vector<ChannelSftp.LsEntry> list = channelSftp.ls(filePattern);

Получение исключения Mockito на линии.

channelSftp = (ChannelSftp) channel;

Исключение:

java .lang.ClassCastException: com.jcraft.jsch.Channel $ MockitoMock $ 1983492043 нельзя преобразовать в com.jcraft.jsch.ChannelSftp

Тестовый метод вызова метода.

@Mock(answer = Answers.RETURNS_MOCKS)
private JSch mockJsch;

private AppUtils sftp = new AppUtils(){
    @Override
    JSch getSftpJsch() {
        return mockJsch;
    }
};

@Test
public void tetsGetFileList(){
    sftp.getFileList(folderPath, fileName, charEncoding);
}

1 Ответ

0 голосов
/ 20 апреля 2020

Беда в том, что @Mock(answer = Answers.RETURNS_MOCKS) заботится о создании макета для каждого звонка. Включая channel = session.openChannel("sftp");.

Так что channel теперь содержит некоторый поддельный подтип базового класса Channel. Вот почему бросок не удался.

Так что немного более длинный способ издеваться над этим:

@Mock
private JSch mockJsch;

@Mock
private Session session;

@Mock
private ChannelSftp channel;

@Before
public void setUp() {
    Mockito.when(mockJsch.getSession(Mockito.any())).thenReturn(session);
    Mockito.when(session.openChannel(Mockito.any())).thenReturn(channel);
}

private AppUtils sftp = new AppUtils(){
    @Override
    JSch getSftpJsch() {
        return mockJsch;
    }
};

@Test
public void tetsGetFileList(){
    sftp.getFileList(folderPath, fileName, charEncoding);
}
...