2013-07-03 2 views
1

У меня есть метод, который генерирует исключение. И у меня такой тест.Утверждение об исключении вместе с другими утверждениями jUnit

@Rule 
public ExpectedException expectedEx = ExpectedException.none(); 

@Test 
public void shouldThrowExceptionIfValidationFails() throws Exception { 
    doThrow(new InvalidException("Invalid Token")).when(obj).foo(any()); 

    expectedEx.expect(InvalidException.class); 
    expectedEx.expectMessage("Invalid Token"); 

    // my method call 

    // verify DB save doesn't happens 

    assertTrue(false); 
} 

Тест утверждают для исключения, и поскольку исключение выбрано, проходит тест. Он не заботится о последней строке assertTrue(false)

Как я могу убедиться, что мои другие утверждения также удовлетворены.

ответ

1

Это образец, который я придерживаюсь для этого случая. Он использует ExpectedException, как и было предусмотрено. Мне нравится throw e, а не по ошибке после вызова метода метода в try, потому что это не приведет к ложноположительному, если кто-то решит удалить fail (что люди склонны делать, когда видят fail() или если тест терпит неудачу, он достигает fail()).

@Test 
public void shouldThrowExceptionIfValidationFails() throws Exception { 
    doThrow(new InvalidException("Invalid Token")).when(obj).foo(any()); 

    expectedEx.expect(InvalidException.class); 
    expectedEx.expectMessage("Invalid Token"); 

    try{ 
    // my method call 
    }catch(InvalidException e){ 
    // verify DB save doesn't happens 

    assertTrue(false); 

    throw e; 
    } 
} 
Смежные вопросы