2010-01-28 13 views
0

Я пытаюсь гарантировать, что параметр не может быть пустым, добавив оператор assert в начале метода.Unit Testing AssertError в JUnit

При тестировании модулей я пытаюсь объявить, что ожидается AssertError, но он по-прежнему распознается как неудавшийся тест, хотя его поведение является правильным (AssertError получает бросок).

class ExampleTest { 

    @Test(expected=AssertError.class) 
    public void testAssertFails() { 
    assert 0 == 1; 
    } 
} 
+1

Зачем используя 'assert' ключевое слово в модульном тесте, когда JUnit имеет целую кучу' методов assertXYZ' для этой самой задачи? – skaffman

+1

@ skaffman: Я думаю, что предполагается, что проверенный код будет использовать 'assert', модульный тест в вопросе предназначен только для демонстрации. – Grundlefleck

+0

@Allain: хотя указанный код не имеет такой же проблемы, это может быть полезно: http://stackoverflow.com/questions/395317/cause-of-an-unexpected-behaviour-using-junit- 4s ожидалось, исключение-механизм – Grundlefleck

ответ

2

Вы, вероятно, нужно включить утверждения с -ea JVM аргументом, так как они по умолчанию отключена. Когда утверждения отключены, то assert не будет генерировать исключение, если оно не выполнено.

Если вы используете это в Eclipse, вы можете отредактировать установленную JRE в настройках, чтобы добавить это как аргумент, или добавить его в конфигурацию запуска для своих тестов.

Кроме того, исключение составляет AssertionError, а не AssertError.

0

Проблема заключается в том, что класс исключения не называется AssertError, но AssertionError проверяет Java API Javadoc.

0

Наверное, не рекомендуется смешивать утверждения уровня JVM с утверждениями JUnit. Тем не менее, вот как это было сделано, прежде чем у нас были аннотации. Вы могли бы рассмотреть возможность сделать это так просто для ясности/документации:

public class Foo { 

    public void someMethod(String someArg) { 
     if (s == null) throw new NullPointerException("someArg cannot be null"); 
    } 
} 


public class FooTest {  

    public void testSomeMethodNullArg() { 
    try { 
     foo.someMethod(null); 
     fail("someMethod failed to throw NullPointerException for null arg"); 
    } catch (NullPointerException expected) { 
     // expected exception 
    } 
}