単純な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?
}
例外がキャッチされた場合、テストに失敗します。
@Test
public void testGetBalanceForPerson() {
//creating mock person
Person person1 = mock(Person.class);
when(person1.getId()).thenReturn("mockedId");
//calling method under test
try{
myClass.getBalanceForPerson(person1);
}
catch(Exception e){
fail("Should not have thrown any exception");
}
}
明示的に述べていない限り、例外を予期している限り、JUnitは、キャッチされなかった例外をスローしたすべてのテストに自動的に失敗します。
たとえば、次のテストは失敗します。
_@Test
public void exampleTest(){
throw new RuntimeException();
}
_
さらに、例外でテストが失敗することを確認する場合は、テストするメソッドにthrow new RuntimeException();
を追加し、テストを実行して、失敗したかどうかを確認するだけです。
例外を手動でキャッチしてテストに失敗した場合、JUnitは失敗メッセージに完全なスタックトレースを含めます。これにより、例外の原因をすばやく見つけることができます。
下に示すようにAssertions.assertThatThrownBy()。isInstanceOf()を2回使用することで目的が達成されます。
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
}
}