2010-08-27 3 views
-2

Следующий код не компилируется, потому что недоступен блок catch.JUnit4 и обработка исключений

Я хочу написать функцию «tues» и вызвать ее во многих других модульных тестовых функциях.

Возможно ли это и как реализовать это?

private void catchException(boolean condition) { 
     try 
     { 
      assertTrue(condition); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getMessage()); 
     } 
} 

Спасибо!

+3

Что именно вы пытаетесь достичь? – tobiasbayer

+0

Нет, не в настоящей форме. Что вы пытаетесь достичь? – mikek

+0

Что такое функция «tues»? Что это связано с недостижимым блоком catch? Я вообще не понимаю вопроса. –

ответ

0

Изменение SomeException на Exception приведет к компиляции кода.

2

Проблема с вашим кодом заключается в том, что assertTrue не выбрасывает SomeException, если вы замените его на функцию, которая делает это, она скомпилируется.

2

Я не совсем уверен, что вы просите здесь, но есть пара ошибок в коде, который вы отправили.

У вас может быть только блок catch для проверенного исключения, если код в try может потенциально генерировать исключение того же типа, который вы ловите. Поскольку проверенные исключения должны быть объявлены в предложении throws метода, вы можете проверить, не вызывает ли какой-либо из методов, которые вы вызываете, типы исключений, которые вы ловите. Из документации JUnit на assertTrue:

public static void assertTrue(boolean condition) 

Вы можете видеть, что это не бросает любого проверяемого исключения.

Кроме того, вызов fail() в блоке catch в тесте JUnit действительно не требуется. Единичный тест автоматически завершится неудачей, если будет выбрано неперехваченное исключение.

+0

Благодарим вас за ответ. Я знаю, что я должен написать проверенное исключение int catch block, и это объясняет, почему эта функция не работает. Я называю неисправность() becouse если не делаем, unit тест проходить. – coban

+2

@ coban22, no, uncaught exceptions приведет к сбою теста JUnit: http://junit.sourceforge.net/doc/faq/faq.htm#tests_8 просто добавьте его в предложение 'throws' метода тестирования, чтобы ваш компилирует код. –

1

Просто добавьте throws WhateverException к вашей тестовой сигнатуре, и тест завершится с ошибкой при возникновении исключения.

4

Существует нулевой необходимость поймать исключение в рамках метода испытания на неудачу его:

public Object methodUnderTest() throws SomeException { 
    ... 
} 

@Test 
public void testMethod() throws SomeException() { 
     Object obj = methodUnderTest(); 
     assert... 
} 

Если SomeException выбрасывается methodUnderTest(), testMethod() потерпит неудачу.

1

На самом деле не совсем понятно, что вам нужно сделать с помощью вашего кода. Если вы хотите иметь отформатированное сообщение, за исключением запущенного JUnit, если ваш утверждает, терпит неудачу, то почему бы тебе это следующим образом:

assertTrue("Condition should hold because....", conditionToCheck); 

Таким образом, JUnit напечатает сообщение, при условии, если проверка не удалась. Я настоятельно рекомендую это, особенно если у вас есть много тестов, потому что

  • позволяет быстро идентифицировать проблему
  • помогает члену вашей команды, чтобы понять цель вашего утверждаюта
-1

Очевидно мой вопрос непонятно.

У меня есть много модульных тестов, и все методы бросают одно и то же исключение с другим сообщением об ошибке. «SomeException» - это исключение. Я должен уловить и прочитать сообщение об ошибке.

Что я хочу достичь, это написать один метод, который будет общим для всех модульных тестов и где я могу распечатать сообщение об ошибке.

тесты Теперь блок выглядит так

public void test_something() 
    {  
     try 
     { 
      assertTrue(bw.doSomething("test")); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
    } 

public void test_something1() 
    { 
     IBroadworks bw = getSomehting1(); 
     try 
     { 
      assertTrue(bw.doSomething1("test1")); 
     } 
     catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
    } 
... 

Итак ниже код повторяется во всех модульных тестов, и это не нормально.

... 
try{ 
assertTrue(condition); 
} 

catch (SomeException e) 
     { 
      fail("exception = " + e.getReason()); 
     } 
... 
Смежные вопросы