web-dev-qa-db-ja.com

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?


}
12
java123999

例外がキャッチされた場合、テストに失敗します。

@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");
   }
}
26
UserF40

明示的に述べていない限り、例外を予期している限り、JUnitは、キャッチされなかった例外をスローしたすべてのテストに自動的に失敗します。

たとえば、次のテストは失敗します。

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

さらに、例外でテストが失敗することを確認する場合は、テストするメソッドにthrow new RuntimeException();を追加し、テストを実行して、失敗したかどうかを確認するだけです。

例外を手動でキャッチしてテストに失敗した場合、JUnitは失敗メッセージに完全なスタックトレースを含めます。これにより、例外の原因をすばやく見つけることができます。

6
125_m_125

下に示すように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
    }
}
0
MLS