SeokRae / spring-transaction

트랜잭션 관련 내용 공유를 위한 레포
1 stars 0 forks source link

트랜잭션에 대한 학습에서 모킹 테스트를 하는 이유? #11

Open SeokRae opened 6 days ago

SeokRae commented 6 days ago

트랜잭션 관련된 로직을 구현하고 테스트를 진행하면서 모킹(mock) 테스트에 대한 의문을 가질 수 있습니다.

트랜잭션과 연관된 내용을 검증할 때 모킹 테스트의 한계

1. 실제 트랜잭션 동작 검증 불가

트랜잭션 전파, 롤백, 커밋 등의 실제 트랜잭션 동작을 검증하기 어렵습니다.

2. 단순 로직의 학습에 적합

트랜잭션 경계 내부의 복잡한 비즈니스 로직을 검증하고 학습하기보다는, 트랜잭션과 상호작용하는 부분을 단순하게 학습할 때 유용합니다.

따라서, 현재 프로젝트에서는 모킹 테스트를 실제 트랜잭션 매니저나 데이터베이스 없이 트랜잭션 관련 로직을 학습하거나 특정 트랜잭션 경로를 테스트 하기 위해 사용합니다.

또다른 이유로 모킹 테스트는 유용할 수 있습니다.

1. 트랜잭션 시작/종료에 따른 동작(외부 로직) 테스트

트랜잭션 내부의 세부적인 비즈니스 로직이나 트랜잭션이 어떻게 시작되고 종료되는지에 대한 학습보다, 트랜잭션 외부의 로직이 트랜잭션과 어떻게 상호작용하는지를 학습하고 테스트하는 것을 목적으로 합니다.

ex) 트랜잭션 성공 또는 실패 이후, 특정 비즈니스 로직이 실행되는가?

2. 외부 시스템과의 상호작용이 있는 트랜잭션 처리

트랜잭션이 외부 시스템과 상호작용하는 경우, 예를 들어 트랜잭션 중 외부 API 호출이 실패할 경우 어떤 동작을 하는지 학습하기 위해 모킹을 사용할 수 있습니다.

ex) 외부 API와 트랜잭션이 상호작용하는 경우, 외부 시스템의 결과를 가정하여 성공 및 실패 상황을 검증

결론

트랜잭션 자체의 동작을 학습하려는 경우, 모킹 테스트는 제한적인 효과를 가집니다. 하지만 트랜잭션과의 상호작용, 트랜잭션 전후 처리, 또는 외부 시스템과의 통합이 중요할 때는 모킹을 통해 빠르고 독립적인 테스트를 작성하고 학습할 수 있습니다. 특히, 외부 의존성을 갖는 경우에는 모킹을 통해 실패 시나리오를 쉽게 시뮬레이션할 수 있다는 점에서 유용할 수 있습니다.