1

我有一个抛出异常的方法。我有一个这样的测试。

@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)

我怎样才能确保我的其他断言也得到满足。

4

1 回答 1

1

这是我在这种情况下遵循的模式。它ExpectedException按设计使用。我喜欢throw e在方法方法调用之后而不是失败,try因为如果有人决定删除它不会导致误报fail(人们在看到fail()或测试失败时倾向于这样做,因为它击中 a 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;
  }
 }
于 2013-07-03T13:27:05.797 回答