본문 바로가기
카테고리 없음

테스트 쉽게 하기3

by 경자꿈사 2025. 1. 13.

테스트 코드를 작성하다 보면 테스트를 수행하기 전과 후에 어떠한 작업이 필요한 경우가 있다.
예를 들어 내가 작성한 코드가 특정 폴더의 파일들을 다른 폴더로 이동시키는 기능이라고 해보자. 
이 코드를 테스트하기 위해서는 테스트를 위한 폴더와 파일들을 미리 준비해 놓아야 한다.
그리고 테스트 후에는 옮겨진 파일들을 삭제하는 정리 작업이 필요하다.

메서드 호출의 전후나 프로그램 종료 등 특정 시점에 실행될 수 있도록 만들어 놓은 코드를 훅(Hook)이라고 하는데, 
Minitest에서도 테스트 메서드의 실행 전후에 필요한 작업을 실행시킬 수 있도록 setup과 teardown이라는 훅(Hook) 메서드를 정의해 놓았다.
setup 메서드는 각 테스트 메서드를 실행하기 전마다 호출이 되고, teardown 메서드는 각 테스트 메서드의 실행이 끝났을 때마다 호출이 된다.

아래 그림을 보면 Minitest의 LifecycleHooks 모듈에서 정의해 놓은 여러 훅(Hook) 메서드들을 볼 수 있는데, 
setup과 teardown 메서드 자체에 대해서도 이전과 이후에 훅(Hook)을 걸 수 있도록 before_setup, after_setup 메서드와 before_teardown, after_teardown 메서드를 정의해 놓은 걸 알 수 있다.

그러면 먼저 6개의 훅(Hook) 메서드가 해당 시점에 잘 호출이 되는지 간단하게 테스트를 진행해 보자.
아래 그림을 보면 test_add와 test_sub 두 개의 테스트 메서드가 실행되기 전과 후에 훅(Hook) 메서드 6개가 모두 잘 호출되는 걸 볼 수 있다.
그리고 중요한 건 각각의 테스트 메서드가 서로 다른 객체를 대상으로 실행이 된다는 것이다.
또한 name 인스턴스 변수를 통해 훅(Hook) 메서드에서 현재 어떠한 테스트 메서드가 호출되는지 확인할 수 있었다.

이번에는 훅(Hook)을 사용하는 좀 더 실제적인 예제를 위해, 서두에 얘기했던 특정 폴더의 파일들을 다른 폴더로 이동시키는 기능을 테스트하는 코드를 작성해 보자.
아래 그림을 보면 test_move라는 테스트 메서드에서 FileUtils 모듈의 mv 메서드를 테스트하고 있는데, 테스트 준비 및 정리를 위해 before_setup, setup, teardown 세 가지 훅(Hook)을 사용하고 있다.
before_setup에서는 테스트 폴더의 경로를 갖는 인스턴스 변수를 정의하고, setup에서는 테스트 폴더 안에 확장자가 'txt'인 테스트용 빈 파일 10개를 생성하며, 
teardown에서는 실제 테스트를 통해 이동된 파일들을 삭제하는 정리 작업을 하도록 했다.

테스트 전과 후에 필요한 작업들은 훅(Hook)을 통해 처리하도록 했기 때문에 테스트 메서드는 실제 테스트를 위한 검증 구문 작성에만 집중하면 된다.
See you again~~