2015-10-20 2 views
0

Так может случиться, что у меня есть основное недоразумение в Java. Допустим, у меня есть метод, который получает параметр Object as. Есть ли еще смысл или это можно проверить, что происходит, когда я прохожу нуль ?:Mockito - Тестирование NullPointer

 @Test(expected = NullPointerException.class) 
     public void test_nullPointer() { 
      doThrow(new NullPointerException()).when(myService).getSomeInformation(null); 
      classUnderTest.doSomething(null); 
      verify(myService).getSomeInformation(isNull(myObject.class)); 
     } 

Конечно, это не работает. Но это то, что я сейчас пытаюсь понять, если, конечно, это даже имеет смысл сделать это.

Редактировать: myService.getSomeInformation (myObject obj) вызывается, когда я вызываю classUnderTest.doSomething (myObject obj). Таким образом, он передает obj myService, чтобы вернуть что-то на основе obj.

Дело в том, что я просто хочу убедиться, что если какой-либо другой класс вызовет classUnderTest.doSomething (null), будет выбрано исключенное исключение NullPointerException. Это просто вопрос, если это даже необходимо, проверяя это поведение. И если да, то как это реализовать.

+0

Этот код: 'doThrow (new NullPointerException()). Когда (myService) .getSomeInformation (null);' означает, что когда метод 'getSomeInformation'' mService' будет вызываться с параметром 'null', исключение будет выбрано. Нам не хватает какого-то кода, чтобы увидеть, что может быть неправильным (это действительно макет? Является ли метод вызванным? И т. Д.) – Tunaki

+1

Ваш оператор проверки не будет обработан (поскольку JVM выбрала NPE в предыдущей строке). – Stormcloud

+0

Отредактировано несколько дополнительных данных. – user5417542

ответ

0

Это работает (при условии, someService это фиктивный) ...

@Test(expected = NullPointerException.class) 
    public void test() throws SQLException { 
     when(someService.getSomething(null)).thenThrow(new NullPointerException()); 
     this.someService.getSomething(null); 
    } 

... но если вы начинаете испытывать ваши неработающими, вы, вероятно, следует начать с обращения с ним лучше, чем просто бросать неработающими вокруг (а затем тест это лучшее поведение).

Имеет ли смысл? Честно говоря, я сомневаюсь. NPE - это то, что происходит, если вы недостаточно проверяете. Я лично не считаю NPE чем-то, что ДОЛЖНО быть брошено, просто что-то происходит, потому что я перепутал другие проверки. Исключение IllegalArgumentException в начале (общедоступного) метода, вероятно, лучше (и, по крайней мере, более ясно), чем NPE где-то глубоко в коде.

+0

OT немного: будьте готовы к стандартной библиотеке, чтобы бросать NPE, поскольку это проект, рекомендуемый Блохом, см. Этот ответ http://stackoverflow.com/questions/3881/illegalargumentexception-or-nullpointerexception-for-a-null- Параметр/8160 # 8160 Конечно, как показывает этот вопрос, в сообществе, безусловно, нет консенсуса в сообществе. –

Смежные вопросы