2013-05-17 3 views
0

Я пытаюсь выполнить простой тест junit для метода. Мое намерение состоит в том, чтобы проверить, не является ли параметр метода null. Чтобы тест завершился неудачно, если параметр равен null.JUnit not null test

метод:

/* 
* @return the db entry object 
*/ 
getEntry(String user, String grp, int status); 

Моя первая попытка осуществить тест является

public void testGetEntry() { 
    String userId = null; 
    getEntry(userId, "grp1", 3); 
    asserNotNull(userId); 
} 

Я думаю, что это еще не правильный путь. thx для любой помощи :)

+3

Конечно, вам нужен ваш * test *, чтобы проверить, правильно ли работает метод, если параметр * является * null - например, проверяя, что выбрано исключение. Итак, что * do * вы хотите, чтобы этот метод выполнял, когда параметр равен NULL? Проверка на это не может быть в тесте - она ​​должна быть в методе производства. –

+1

В вашем примере 'userId' будет * always * быть нулевым в строке assert, независимо от того, что делает' getEntry'. – assylias

+1

Я не знаю, понимаете ли вы, что вы пытаетесь достичь, определенно мы не можем. Попытайтесь переосмыслить то, что вы пытаетесь сделать, и четко объяснить это. – LionC

ответ

3

Вы не можете это проверить. Вы можете проверить beavhior как: «Убедитесь, что исключено исключение IllegalArgumentException, если передан нулевой параметр». Единичный тест для тестирования, если параметр не является нулевым, не имеет смысла, это не цель модульного тестирования: https://en.wikipedia.org/wiki/Unit_testing

Здесь в методе должна быть выполнена «проверка, если параметр метода не равен нулю».

+0

Хорошо. я должен поймать возможный NullPointerEx с тестом. Я прав? – vicR

+0

Не играйте с огнем, что вы будете делать, если поймаете исключение NullPointerException? Если вам не нужен нулевой параметр для вашего метода, сначала проверьте их и бросьте себе исключение IllegalArgumentException. –

0

Чтобы проверить, что ваш метод не имеет нулевого параметра, вам необходимо использовать Mockito и высмеять класс (назовем его C.java), где объявлен этот метод (назовем его m (param)) , Конечно, класс C не должен быть классом, который вы хотите протестировать (макет - это «фиктивная» реализация).

Если вы в том случае, когда вы вызываете метод м класса С, и вы хотите, чтобы убедиться, что аргумент «пары» т (пары) не равно нуля, вот как это сделать:

C cMock= Mockito.mock(C.class); 
verify(cMock).m(isNotNull()); 

Вот некоторые полезные документы:

http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/Matchers.html

http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html

Я надеюсь, что это помогает

С уважением

3

Вы должны обязательно проверить NullPointerTester от Guava. Вы можете использовать его в своих тестах, как это:

new NullPointerTester().testAllPublicInstanceMethods(YourClass.class) 

Затем вам нужно аннотировать методы с JSR-305 сек @NonNull

getEntry(@NonNull String user, @NonNull String grp, int status); 

Затем использовать Preconditions checkNotNull в вашем рабочем коде.

getEntry(@NonNull String user, @NonNull String grp, int status) 
{ 
    Preconditions.checkNotNull(user, "user must be specified"); 
    Preconditions.checkNotNull(grp, "grp must be specified"); 
    //return entry; 
} 

Это приведет к тому, что другие классы получат исключение NullPointerException при неправильном использовании вашего класса. Когда они получат это, они узнают, что они сделали что-то неправильно.