powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как выбросить исключение в junit
8 сообщений из 8, страница 1 из 1
Как выбросить исключение в junit
    #37707793
recvezitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код, его надо покрыть тестами. Некоторые участки не понятно как до них достать. В основном это try catch с страшными эксепшенами. Нарпимер:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private String webServiceMessageToString(WebServiceMessage message) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
            message.writeTo(stream);
        } catch (IOException e) {//<-- как бросить исключение?
            logger.error("Couldn't create string representation", e);
        }

        return stream.toString();
    }



Я понятия не имею как естественно сгенерировать такое исключение, поэтому хочется просто его бросить и проверить что при его появлении все сработало как надо. Используется также mock, только я не сильно силен в нем
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37708124
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
recvezitor,
Mockito фреймворк - очень удобен для таких тестов.

вот тут очень простые и доступные примеры: http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html
погуглите "Mockito" и "PowerMock" найдете кучу всякого, полезного...
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37708149
justforsqlru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recvezitor,

А что именно нужно то ?
пробросить ? можно обернуть в Runtime

throw new RuntimeException(e)
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37708294
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recvezitor
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private String webServiceMessageToString(WebServiceMessage message) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
          message.writeTo(stream);
        } catch (IOException e) {//<-- как бросить исключение?
            logger.error("Couldn't create string representation", e);
        }

        return stream.toString();
    }


Ты не то тестируешь. По сути тебе надо сделать модульный тест для message.writeTo(stream)
и объявить его вызывающим WebServiceMessageSomeException или IOException. Остальное
сделает сам JUnit.
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37708533
recvezitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonrecvezitor
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private String webServiceMessageToString(WebServiceMessage message) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
          message.writeTo(stream);
        } catch (IOException e) {//<-- как бросить исключение?
            logger.error("Couldn't create string representation", e);
        }

        return stream.toString();
    }


Ты не то тестируешь. По сути тебе надо сделать модульный тест для message.writeTo(stream)
и объявить его вызывающим WebServiceMessageSomeException или IOException. Остальное
сделает сам JUnit.
message.writeTo(stream); - это не мой метод, это метод типа проверенный. Мне нужно убедиться что когда отловилось исключение, то все остальное клево. Почему возникло эта задача, по идее стоит try и все отлавливает, но на это место ругается cobertura и портит всю статистику.

Вот мне именно нужно сделать как то throw new IOException в моем тесте, но так чтобы оно бросилось в блоке try
Пока не читал подробно про mockito, может там че есть
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37708940
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
recvezitor,

эти строки решат твою проблему. мокито рулит!
Код: java
1.
2.
3.
4.
5.
6.
@Mock
private WebServiceMessage message;

.... 

Mockito.doThrow(new IOException("test...")).when(message).writeTo(Matchers.any(ByteArrayOutputStream.class));
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37711119
recvezitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nisrecvezitor,

эти строки решат твою проблему. мокито рулит!
Код: java
1.
2.
3.
4.
5.
6.
@Mock
private WebServiceMessage message;

.... 

Mockito.doThrow(new IOException("test...")).when(message).writeTo(Matchers.any(ByteArrayOutputStream.class));


Мерси, все здорово работает, но только на не private методах. Как заставить мокито бросать эксепшен чтобы он бросался в private методах. Сейчас мне пришлось поменять облдасть видимости на protected и вызывать метод на пряую, а если вызывать метод в методе, то исключение не генерируется:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
@Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint) throws TransformerException, JAXBException, ParserConfigurationException {
        WebServiceMessage response = messageContext.getResponse();

        try {
            transformer.toAxisFormat(response);
        } catch (SOAPException e) {
            logger.error("Couldn't transform SOAP message", e);
        }

        logger.debug("Transformed message: {}", webServiceMessageToString(response));

        return true;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint) {
        return true;
    }

    protected String webServiceMessageToString(WebServiceMessage message) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
            message.writeTo(stream);
        } catch (IOException e) {
            logger.error("Couldn't create string representation", e);
        }

        return stream.toString();
    }




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@Mock
    GenericSoapMessageTransformer transformer;

    @Mock
    private WebServiceMessage message;

    IDTSimulatorInterceptor interceptor;

@Test
    public void checkSOAPException() throws SOAPException, IOException, TransformerException, JAXBException, ParserConfigurationException {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SaajSoapMessageFactory factory = new SaajSoapMessageFactory(messageFactory);
        MessageContext messageContext = new DefaultMessageContext(factory);
        Mockito.doThrow(new SOAPException("test...")).when(transformer).toAxisFormat(Matchers.any(WebServiceMessage.class));
        boolean flag = interceptor.handleResponse(messageContext, new Object());
        assertTrue(flag);
    }

    @Test
    public void checkIOException() throws SOAPException, IOException, TransformerException, JAXBException, ParserConfigurationException {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SaajSoapMessageFactory factory = new SaajSoapMessageFactory(messageFactory);
        MessageContext messageContext = new DefaultMessageContext(factory);
        Mockito.doThrow(new IOException("test...")).when(message).writeTo(Matchers.any(ByteArrayOutputStream.class));
        interceptor.webServiceMessageToString(message);
// а надо бы так :
//boolean flag = interceptor.handleResponse(messageContext, new Object());
//assertTrue(flag);
    }
...
Рейтинг: 0 / 0
Как выбросить исключение в junit
    #37712135
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
recvezitor,

На сколько я понимаю, private методы не должны вызываться на прямую из junit-а.
Вы должны протестировать не private методы, которые в свою очередь вызывают приватные методы.
если мок на WebServiceMessage message корректно передаётся в приватную методу, но с мокито должен работать безотказно.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как выбросить исключение в junit
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]