Mock
Mock이란 테스트 더블 이라고도 하며, 실제 사용되어야 하는 객체의 대역을 의미한다.
Mock객체는 대상의 행위를 검증하는데에 있어서 사용하기 때문에 객체가 가지고 있어야하는 기본 정보를 반드시 가지고 있다. 테스트를 해야하는 어떠한 객체를 검증해야 할 경우 그 객체가 가지고 있는 정보들을 미리 갖고 있어야 한다.
Mock객체를 직접 생성하는 경우에는 일일이 클래스를 만들기 어려울 것이다. 그러므로 우리는 Mockito라는 라이브러리를 이용한다.
Mockito란?
단위 테스트를 위한 Java Mocking Framework이다.
또한 Mockito는 Junit위에서 동작하며 Mocking과 Verification을 도와주는 Framework이다.
의존성 추가
build.gradle에 다음과 같이 추가해준다.
testImplementation org.mockito.mockito-all:1.9.5
기입 후에 build를 해주면 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에 대해서만 다루었지만 다음 포스팅에서는 MockMvc를 다뤄보는 포스팅을 올리도록 하겠다.
'Java' 카테고리의 다른 글
Effective Java 1장 (0) | 2022.08.05 |
---|---|
MockMvc (0) | 2022.08.04 |
[Java] Enum (0) | 2022.08.03 |
[Java] Optional (0) | 2022.08.03 |