如何使用mockito检查是否没有抛出异常?

时间:2016-08-10 08:56:52

标签: java unit-testing exception exception-handling mockito

我有一个简单的Java方法,我想检查它是不会抛出任何exceptions

我已经模拟了参数等,但我不确定如何使用Mockito来测试方法中没有抛出任何异常?

当前测试代码:

  @Test
  public void testGetBalanceForPerson() {

   //creating mock person
   Person person1 = mock(Person.class);
   when(person1.getId()).thenReturn("mockedId");

  //calling method under test
  myClass.getBalanceForPerson(person1);

  //How to check that an exception isn't thrown?


}

4 个答案:

答案 0 :(得分:20)

如果发现异常,则测试失败。

SYSTEM

答案 1 :(得分:6)

只要您没有明确说明,您期望发生异常,JUnit将自动失败任何抛出未捕获异常的测试。

例如,以下测试将失败:

@Test
public void exampleTest(){
    throw new RuntimeException();
}

如果您还想检查,Exception上的测试会失败,您只需在要测试的方法中添加throw new RuntimeException();,运行测试并检查它们是否失败。

当您没有手动捕获异常并且测试失败时,JUnit将在失败消息中包含完整的堆栈跟踪,这样您就可以快速找到异常的来源。

答案 2 :(得分:2)

如果您使用的是Mockito 5.2或更高版本,则可以使用assertDoesNotThrow

Assertions.assertDoesNotThrow(() -> myClass.getBalanceForPerson(person1););

答案 3 :(得分:0)

如下所示两次使用Assertions.assertThatThrownBy()。isInstanceOf()即可达到目的!

import org.assertj.core.api.Assertions;
import org.junit.Test;

public class AssertionExample {

    @Test
    public void testNoException(){
        assertNoException();
    }



    private void assertException(){
        Assertions.assertThatThrownBy(this::doNotThrowException).isInstanceOf(Exception.class);
    }

    private void assertNoException(){
        Assertions.assertThatThrownBy(() -> assertException()).isInstanceOf(AssertionError.class);
    }

    private void doNotThrowException(){
        //This method will never throw exception
    }
}