Junit等待并处理异常后断言

Gob*_*ins 0 java junit assert exception-handling mockito

在第一次和第二次通话时抛出的方法:

public void foo() throws Exception
Run Code Online (Sandbox Code Playgroud)

测试:

@test
public void testFooThrowsAtFirstAndSecondTime(){
    boolean thrown;
    try {
       foo();
    } catch (Exception e) {
       thrown = true;
    }
    assertTrue(thrown);

    thrown = false;
    try {
       foo();
    } catch (Exception e) {
       thrown = true;
    }
    assertTrue(thrown);

    foo();
}
Run Code Online (Sandbox Code Playgroud)

你能帮我找到更好的解决方案吗?使用Mockito获得更好的解决方案也是可以接受的.

我的意思是更好,如果我可以在我的测试中避免尝试/捕获甚至多次尝试/捕获.在其他语言或jAssert我认为即使在春天也有如下陈述:

assertThrows(method(..)) //PseudoCode
Run Code Online (Sandbox Code Playgroud)

我认为与Mockito或JUnit 4.x有类似的事情.

我知道

@Test(expected=Exception)
Run Code Online (Sandbox Code Playgroud)

但是,如果我期待一次投掷并且测试结束之后,这将是可接受的.

nra*_*ner 5

我不认为每个方法调用都是可行的.

我会写这样的测试:

@Test
public void testFooThrowsAtFirstAndSecondTime() throws Exception {
  try {
    foo();
    fail("foo did not throw an exception");
  } catch (Exception ex) { }

  try{
    foo(); 
    fail("foo did not throw an exception");
  } catch (Exception ex) { }

  foo();
}
Run Code Online (Sandbox Code Playgroud)