개별 테스트는 @Test 어노테이션이 붙은 함수로 작성 된다.

assertEquls(기댓값, 실제값) → 첫 인자로 기댓값, 두번째 인자로 실제값을 넣는다.

둘이 같은 지 단언하는 함수이다.

둘이 같으면 테스트가 성공, 다르면 테스트가 실패 이다.

Fake란 실제 객체와 비슷하게 동작되도록 구현된 모방 객체이다.

class FetchUserDataTest {
  @Test
  fun `Should construct user`() = runBlocking {
    //given
    val repo = FakeUserDataRepository()
    val useCase = FetchUserUseCase(repo)
    
    //when
    val result = useCase.fetchUserData()
    
    //then
    val expectedUser = User(
      name = "Ben",
      friends = listOf(Friend("some-friend-id-1")),
      profile = Profile("Example description")
    )
    assertEquals(expectedUser, result)
  }

  class FakeUserDataRepository : UserDataRepository {
    override suspend fun getName(): String = "Ben"
    
    override suspend fun getFriends(): List<Friends> =
      listOf(Friend("some-friend-id-1"))
    
    override suspend fun getProfile(): Profile =
      Profile("Example description")
  }
}

given - when - then 패턴이란?

given - when - then은 테스트 코드를 명확하게 구성하기 위한 대표적인 작성 방식이다.

이 방식은 테스트 코드의 의도와 흐름을 쉽게 파악할 수 있도록 도와준다.

간단한 일시중단 함수를 테스트 할 때는 runBlocking함수를 사용해 코루틴을 만들면 된다.

시간 의존성 테스트 하기