junit Exception
От: Аноним  
Дата: 13.04.07 06:03
Оценка:
Добры день не подскажите как JUNIT работает с Exception
так правильно писать?




@Test public void testCommandLine(){

        try {
             engine.setCommand(new String ("RUR 100 20").split(" "));
                         fail();  
            
        } catch (Exception e) {
            assertEquals(e.toString(),"java.lang.Exception: Wrong operand");
        }
Re: junit Exception
От: SergeyLyadzhin  
Дата: 13.04.07 06:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добры день не подскажите как JUNIT работает с Exception

А>так правильно писать?



А>

А>@Test public void testCommandLine(){

А>        try {
А>             engine.setCommand(new String ("RUR 100 20").split(" "));
А>                         fail();  
            
А>        } catch (Exception e) {
А>            assertEquals(e.toString(),"java.lang.Exception: Wrong operand");
А>        }

А>



Нет. Во-первых в 4м JUnit есть специальная конструкция для проверки ожидаемых исключений (JUnit FAQ рулит =) )
    @Test(expected=IndexOutOfBoundsException.class)
    public void testIndexOutOfBoundsException() {
        ArrayList emptyList = new ArrayList();
        Object o = emptyList.get(0); // список пустой, получим исключение IndexOutOfBoundsException
    }


Вот. А во-вторых НИКОГДА не выкидывай и не catch java.lang.Exception! Это жесть. Делай свои подклассы.
Мало того, что ты таким макаром хватаешь все виды исключений, включая RuntimeException-ы, так к тому же
ты не получаешь толком никакой информации об ошибке, кроме текстового мессаджа.
Re[2]: junit Exception
От: Аноним  
Дата: 13.04.07 06:31
Оценка:
Здравствуйте, SergeyLyadzhin, Вы писали:

SL>Здравствуйте, Аноним, Вы писали:


А>>Добры день не подскажите как JUNIT работает с Exception

А>>так правильно писать?



А>>

А>>@Test public void testCommandLine(){

А>>        try {
А>>             engine.setCommand(new String ("RUR 100 20").split(" "));
А>>                         fail();  
            
А>>        } catch (Exception e) {
А>>            assertEquals(e.toString(),"java.lang.Exception: Wrong operand");
А>>        }

А>>



SL>Нет. Во-первых в 4м JUnit есть специальная конструкция для проверки ожидаемых исключений (JUnit FAQ рулит =) )

SL>
SL>    @Test(expected=IndexOutOfBoundsException.class)
SL>    public void testIndexOutOfBoundsException() {
SL>        ArrayList emptyList = new ArrayList();
SL>        Object o = emptyList.get(0); // список пустой, получим исключение IndexOutOfBoundsException
SL>    }
SL>


SL>Вот. А во-вторых НИКОГДА не выкидывай и не catch java.lang.Exception! Это жесть. Делай свои подклассы.

SL>Мало того, что ты таким макаром хватаешь все виды исключений, включая RuntimeException-ы, так к тому же
SL>ты не получаешь толком никакой информации об ошибке, кроме текстового мессаджа.

а пример можно про вот это А во-вторых НИКОГДА не выкидывай и не catch java.lang.Exception! Это жесть. Делай свои подклассы.
Re: junit Exception
От: joybell0  
Дата: 13.04.07 06:47
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Добры день не подскажите как JUNIT работает с Exception


@Test(expected=YourException.class)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: junit Exception
От: SergeyLyadzhin  
Дата: 13.04.07 06:47
Оценка: 1 (1)
Гм.. Ну хотя бы так вот: для некоторой исключительной ситуации в системе создаёшь подкласс Exception (если в API нету ничего подходящего), который эту ситуацию описывает:
public class MyException extends Exception {
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
    }

    public MyException(Throwable cause) {
        super(cause);
    }
}


Дальше, для метода в котором может возникнуть это исключение объявляешь throws MyException.
В клиентском коде для этого класса ты делаешь не
catch (Exception e)
а:
catch (MyException e)

Вообще вот здесь http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html всё очень доступно расписано, что касается исключений.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.