Добры день не подскажите как 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");
}
Здравствуйте, Аноним, Вы писали:
А>Добры день не подскажите как 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-ы, так к тому же
ты не получаешь толком никакой информации об ошибке, кроме текстового мессаджа.
Здравствуйте, 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! Это жесть. Делай свои подклассы.
Здравствуйте, <Аноним>, Вы писали:
А>Добры день не подскажите как JUNIT работает с Exception
@Test(expected=YourException.class)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Гм.. Ну хотя бы так вот: для некоторой исключительной ситуации в системе создаёшь подкласс 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 всё очень доступно расписано, что касается исключений.