더북(TheBook)
@Test
fun `List owners can see their lists`() {
    val listName = "shopping"
    val foodToBuy = listOf("carrots", "apples", "milk")
    val frank = ToDoListOwner("Frank")
    startTheApplication(frank.name, createList(listName, foodToBuy))
    frank.canSeeTheList(listName, foodToBuy)
}

다음 단계로 넘어가서, 함수적 관점을 사용해보자. 이 테스트는 부록 A 함수를 순수하게 유지하라에서 설명한 것처럼 부수 효과에 크게 의존한다. 다시 말해 startTheApplication은 결과적으로 메인 ‘효과’, 즉 시작된 애플리케이션을 반환하지 않는다. 대신 액터는 애플리케이션이 실제로 시작될 것이라고 가정한다.

이는 단순히 이론적 순수성이나 함수형에 대한 자부심 때문만은 아니다. 우리가 원하는 것은 메서드가 애플리케이션의 컨텍스트 외부에서 호출되면 테스트가 컴파일되지 않고, 액터가 올바른 메서드를 호출하고 있는지 확실히 확인하는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.