我有一个简单的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?
}
答案 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
}
}