Test

단위 테스트 - 마틴 파울러

ch-yang 2023. 2. 15. 01:32

Martin fowler가 작성한 "Unit Test"란 글을 전부 번역하기에는 길어서 알고 싶었던 내용만 요약했다.

https://martinfowler.com/bliki/UnitTest.html

 

bliki: UnitTest

Unit Tests are focused on small parts of a code-base, defined in regular programming tools, and fast. There is disagreement on whether units should be solitary or sociable.

martinfowler.com

Unit Test 란

사람마다 다양한 정의를 갖고 있어, Unit Test에 대한 엄격한 정의를 하려면 더 혼란스러울 수 있다. 하지만 사람들이 말하는 Unit Test의 다양한 정의의 공통적인 내용은 다음과 같았다.

  1. 시스템의 작은 부분에 초점을 둔 저수준모
  2. 프로그래머가 테스트 툴(프레임워크)을 사용해서 작성 (?)
  3. 다른 종류의 테스트 보다는 빠를 것으로 예상

위와 같은 공통점이 있지만, 사람마다 다른 단위(테스트 범위)에 대한 정의가 혼란을 유발한다.

Sociable Tests VS Solitary Tests

단위에 대한 정의 보다 더 중요한 것은 테스트 중인 단위가 Sociable 해야하는지 아니면 Solitary 해야하는지 여부이다.

Order 클래스의 price 메서드를 테스트한다고 가정해보자. price 메서드는 Product 클래스와 Customer 클래스의 메서드도 호출한다.

여기서 Product 클래스와 Customer 클래스의 메서드의 성공 여부는 price 메서드의 성공 여부에 영향을 주게 된다. 대신 Test Double을 사용하여 product 클래스와 customer 클래스를 대체한다면, 테스트 결과가 price 메서드 단독의 결과라고 볼 수 있다.

  • Sociable Tests : 테스트 중인 Unit이 다른 Unit과도 연관되어 있음
  • Solitary Tests : 테스트 중인 Unit 외에는 Test Double로 대체하던가 하여 연관이 없음

모든Unit이 Solitary 할 필요는 없고, 인접 Unit이 실패하더라도 추적이 어렵지 않다면 테스트를 Sociable하게 해도 문제가 없다.

Classicist VS Mockist

xUnit 테스트가 대중화되면서 Mocking을 지원하는 Mock 객체와 프레임워크가 등장했다. 여기서 두 스타일의 그룹이 탄생했는데 이를 Classic style과 Mockist style이라고 한다.

Classicist는 Sociable test를 선호하는 스타일이고, Mockist는 Solitary test를 선호하는 스타일이다.

Mockist가 Test double을 사용하는 이유는 위에서 설명한 비결정론적 위험과 속도 때문이다. 하지만 다른 Unit이 충분히 안정적이고 빠르다면 Test double을 사용할 이유가 없다.

'Test' 카테고리의 다른 글

Fake Double로 대체해서 테스트하는 방법  (0) 2023.03.17
Test 용어 정리  (0) 2023.02.14
테스트 관련 사이트  (0) 2023.02.14