Модульное тестирование AssertError в JUnit - PullRequest
0 голосов
/ 28 января 2010

Я пытаюсь убедиться, что параметр не может быть нулевым, добавив оператор assert вверху метода.

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

class ExampleTest {

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

Ответы [ 3 ]

2 голосов
/ 28 января 2010

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

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

Также выдается исключение AssertionError, а не AssertError.

0 голосов
/ 15 февраля 2010

Возможно, не очень хорошая идея смешивать утверждения уровня 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
    }
}
0 голосов
/ 28 января 2010

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

...