[Junit] Mock, Mockito



Mock


Mockはテストデュプレクスとも呼ばれ、実際に使用する必要があるオブジェクトの帯域幅を指す.
Mockオブジェクトはターゲットの動作を検証するために使用されるため、オブジェクトが持つべき基本情報を持つ必要があります.テストが必要なオブジェクトを検証する必要がある場合は、そのオブジェクトが持っている情報を事前に持つ必要があります.
Mockオブジェクトを直接作成すると、クラスを1つずつ作成するのは難しいです.そこで、Mockitoという名前のライブラリを使用します.

Mockitoとは?


ユニットテスト用Java Mocking Framework.
また、MockitoはJunit上で動作し、MockingとVerificationを支援するFrameworkです.
依存項目の追加
build.gradleに追加:
testImplementation org.mockito.mockito-all:1.9.5
記入して構築し、mockitoライブラリを追加して使用できます.

個人的な見解.


Mockitoとifの意味はあまり違わないと思います.
だから、もしXXXがあるならば、私にXXXを代入させる感じがあって、コードを书いた后にとても理解しやすいです.
管理者のリポジトリPersonRepositoryがあるとします.
PersonRepository.java
public interface PersonRepository extends JpaRepository<Person, Long> {
    List<Person> findByName(String name);
}
PersonServiceTest.java
ここで言ったことがあれば、方法でコードを書いてみます.
@ExtendWith(MockitoExtension.class)
class PersonServiceTest {
    @Mock
    private PersonRepository personRepository;
    
    @Test
    void getPeopleByName(){
        when(personRepository.findByName("lsj")) // 만약 lsj라는 이름이 있다면 가정
                             .thenReturn(Lists.newArrayList(new Person("lsj"))); //이 객체를 돌려줘
                             
        List<Person> result = personService.getPeopleByName("lsj");
        
        assertThat(result.size()).isEqualTo(1);
        assertThat(result.get(0)).isEqualTo("lsj");
    }
}
このように存在する場合は,返すことを要求するようにコードを行う.
オブジェクトが返された場合は、assertThatを使用して検証し、sizeが1であり、私が要求したlsjという文字列名の値が含まれているかどうかを確認します.
今では簡単なMockとMockitoしか議論されていませんが、次回のPostingではMockMvcに関するpostingをアップロードします.