BackEnd/개발방법론

[단위 테스트와 도구] 단위 테스트 & 통합과 고립(Sociable and Solitary)

JJangGu 2022. 3. 25. 01:44

단위 테스트를 주도로 하는 TDD 에 대해서 간단히 설명을 했습니다.

이제 단위 테스트를 작성할 때, 협력 객체에 대해서 어떤 관점으로 테스트를 작성할 지 또 그에 따른 도구들은 어떤 것이 있는지 학습하겠습니다.

 

해당 내용은 "우아한 테크캠프 Pro" 과정과 "ATDD와 함께 클린 API로 가는 길" 교육을 바탕으로 학습한 내용입니다.

 

1. 단위 테스트란?

응용 프로그램에서 테스트 가능한 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트.

 

단위 테스트는 보통 메서드, 클래스 단위로 정해지는데, 단위의 크기가 작을수록 복잡성이 낮아집니다.

단위에 대한 정의는 하는 사람에 따라 다르지만 결국 검증하려는 시스템에서 작은 부분에 맞추어지고,

다른 종류의 테스트보다 가볍고 빠르고 화이트박스 테스트의 성격을 가지고 있습니다.

 

TDD를 하면서 TDD가 실패하지 않고 지속적으로 진행되기 위해서는 단위를 작게 나누는 것이 중요한데,

단위가 커질수록 구현해야할 Production Code 가 많아질테고, 그러면 테스트의 유지보수도 어려워져 결국 실패하게 됩니다.

 

2. 통합과 고립 (Sociable and Solitary) ?

단위 테스트를 공부하다보면 통합과 고립 (Sociable and Solitary) 이라는 말이 나옵니다. 

이해하기 쉽게 그림을 그려보면

이와 같이 테스트를 하고자하는 객체가 있고 어떤 기능을 테스트하기 위해서 필요한 객체 B, C 가 있습니다.

예를 들어, 정산(Settlement) 기능에 대해 테스트를 한다고 했을때 상품(Product)과 구매(Purchase)에 대한 정보가 필요하다고 해보겠습니다.

그렇다면 정산기능을 테스트할때 테스트가 상품과 구매객체를 실제 객체로 필요로 한다고 하면 이것이 통합(Sociable) 입니다.

관계를 맺고 있는 협력 객체가 있는 경우, 이 객체들을 가짜로 사용하지 않고 실제 객체로 테스트하는 것입니다.

 

이는 통합(Sociable)이 어떤 것을 목표로 하고있는지를 이해해야 합니다.

Sociable 테스트는 여러 장치가 성공적으로 함께 동작하는지에 초점이 맞추어져 있습니다. B와 C 객체는 실제객체이기 때문에, 객체에 변경이 생기면 테스트도 영향을 받고 이는 곧, 실제 객체들이 유기적으로 잘 동작하는지를 보게 됩니다.

 

그렇다면, 이제 고립을 보겠습니다.

마찬가지로 정산기능을 예를 들겠습니다. 

테스트하는 기능은 똑같지만 이번에는 실제 객체를 사용하는 것이 아닌, 가짜 객체를 만들었습니다.

위에서 본 통합과 어떻게 달라졌는지를 보면 왜 "고립" 이라고 하는지 이해가 갑니다.

객체 B 와 C 가 테스트를 목표로 동작하는 가짜 객체로 대체되면서, 테스트가 A에 집중되었습니다.

이게 고립의 목적입니다. 다른 종속성이 단일 단위 테스트를 목표로 작동하게 가정하여 단일 단위 테스트에 집중되도록

고립(Solitary) 시킨 것 입니다. 

 

통합과 고립은 위에서 설명한대로 관점에 차이가 있습니다. 협력 객체들을 실제 객체로 사용할 것인지, 혹은 단일 테스트에 집중하여 협력 객체는 가짜로 만들며 고립시킬 것인지에 대한 것입니다. 

테스트하고자 하는 기능과 목적에 따라 알맞게 선택하면 되겠습니다.

 

 

또한 이후에 Test Double, Stubbing, Mock 에 대한 것을 다음에 학습하며 어떻게 효과적으로 고립시키며 테스트할 수 있는지 알아보겠습니다.

'BackEnd > 개발방법론' 카테고리의 다른 글

[ATDD] RestAssured  (0) 2022.03.20
[ATDD] ATTD 란? Acceptance Test Driven Development  (0) 2022.02.27
[TDD] TDD 란? (Test Driven Development)  (0) 2021.12.28