2015-09-29 2 views
0

У меня есть следующий тест блок:Как поймать это обычное исключение Java?

public class Update { 

    @Rule 
    public final ExpectedException exception = ExpectedException.none(); 

    private Update update; 

    @Before 
    public void setUp(){ 
     this.update = new Update(); 
    } 

    @Test 
    public void validateThrowsExceptionIfMissingId() throws BadParameterException { 
     this.update.setId(null); 

     exception.expect(NotFoundException.class); 
     exception.expectMessage("Error"); 
     this.categoryUpdateRequest.validate(); 
    } 
} 

Который ожидает пользовательский NotFoundException Я метание. Проблема заключается в том, что, даже я вижу исключение бросают в консоли, мой тест не получает его:

com.project.api.exception.NotFoundException: Error. 

Любой намек пожалуйста?

+0

Является ли ваш тест проходящим или неудачным? Покажите нам, что такое 'CategoryUpdateRequest'. –

+0

Это неудачно, я обновлю с помощью CategoryUpdateRequest –

+1

Does 'this.categoryUpdateRequest.validate();' внутренне поймать исключение и вызывать 'exception.printStacktrace()'? В этом случае ознакомьтесь с http://stackoverflow.com/questions/28118207/test-expected-an-exception-exception-was-thrown-it-shows-in-the-output-but-te –

ответ

2

Тест Junit писать ожидает исключение быть выброшен. Ваш код не генерирует исключения. Он просто создает экземпляр Exception и вызывает функцию обработки исключений (вроде).

Вы можете увидеть «исключение», потому что вы создали экземпляр исключения и отправили его в регистратор. Но на самом деле для вас система никогда не является реальным исключением, так как вы никогда не throw это.

JUnit абсолютно прав, жалуясь на то, что исключение не было выбрано.

-2

Вы можете использовать TestNG@Test параметр аннотации expectedExceptions.

Вот пример:

public class CategoryUpdateRequestTest 
{ 

    private CategoryUpdateRequest categoryUpdateRequest; 

    @Before 
    public void setUp(){ 
     this.categoryUpdateRequest = new CategoryUpdateRequest(); 
    } 

    @Test(
     expectedExceptions = { NotFoundException.class }, 
     expectedExceptionsMessageRegExp = "Category object is missing Category id." 
    ) 
    public void validateThrowsExceptionIfMissingCategoryId() throws Exception { 
     this.categoryUpdateRequest.setId(null); 
    } 
} 
+0

Большое спасибо, но я бы хотел использовать @Rule. Вы знаете, как добавить TestNG в Gradle? –

+1

Привет @stackpepe, вы можете добавить testng в свой проект, добавив 'testCompile 'org.testng: testng: 6.9.6'' в раздел' dependancy' вашего 'build.gradle' файла. – sirdarpeace