ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TEST 시리즈 1]단위테스트란? Unit 테스트 정의
    Spring Boot/테스트 2022. 11. 18. 02:07

    회사에서 단위테스트를 추가하는 업무를 맡았다.

     

    그 동안 내가 알고 있던 Unit Test시니어님이 요청하신 Unit Test의 정의가 달라서 일주일이 날아갔다.

     

    이것은 고통과 함께한 단위테스트 기록이다. 

     

    단위테스트의 정의


    마틴 파울러씨는 다음과 같이 말했다. (출처 : https://martinfowler.com/bliki/UnitTest.html)

     

    Unit testing is often talked about in software development, and is a term that I've been familiar with during my whole time writing programs. Like most software development terminology, however, it's very ill-defined, and I see confusion can often occur when people think that it's more tightly defined than it actually is.

     

    • 요약하자면 과거에도 Unit Test 정의에 대한 혼선은 셀 수 없이 많았다, 테스트 전문가가 강연을 했다 하면 첫날 개발자들끼리 Unit Test의 Definition을 물어보는데 그 단위 테스트에 대한 정의만 24가지 이상이었다고 한다. (코에 걸면 코걸이 === 단위테스트)

    But really it's a situational thing - the team decides what makes sense to be a unit for the purposes of their understanding of the system and its testing. Although I start with the notion of the unit being a class, I often take a bunch of closely related classes and treat them as a single unit. Rarely I might take a subset of methods in a class as a unit. However you define it doesn't really matter.

     

    • 결론은 상황에 따라서 단위테스트의 의미는 다르다 라고 파울러씨는 말한다.
    •  Unit의 단위는 클래스가 될 수도 있고, 함수가 될수 도 있고, 여러 클래스 뭉치가 될수 도 있다는 것이다. 정의 따위 무엇이 중요하냐. 테스트 그 자체가 중요하지

     

    그 동안 내가 생각하던 Test의 정의 (이건 틀렸다... 시니어님은 아래의 기능 단위의 통합테스트를 유닛테스트로, 나는 아래의 클래스 단위를 유닛테스트로 생각했다. 그리고 둘다 유닛테스트가 맞다. 하나는 또 통합테스트도 맞다.. 상황에 따라서)

    • 통합테스트 (End to End)

    • 단위테스트 (Unit 하나의 클래스만 유닛으로)

    유닛테스트

     

    다만 공통적으로 가지고 있는 특성은 있다. 

     

    1. Test 프레임워크를 사용한다.  (xUnit 프레임워크)

    2. 작은 단위를 테스트한다고 생각한다. (함수, 클래스, 클래스뭉치.. 등등 모두가 될 수 있음)

    3. 스피드가 다른 테스트 보다 빠르다고 생각한다.

    4. DRY vs DAMP (Don’t Repeat Yourself vs Descriptive and Meaningful Phrases) 사이에 균형이 필요

     

    내가 단위테스트가 클래스 단위로 생각하는 이유는 마치  best practice 처럼 Junit5 + Mockito를 사용하고 

    Mockito와 같은 라이브러리가 제공하는 Test Double이라는 기술 때문일 것이다. 

     

    관계를 가진 유닛테스트를 가짜 객체들과 관계를 만들어서 테스트 Speed를 향상 시킬수 있다.

    (실제 클래스로 하는 테스트 보다 정확성은 떨어질 수 있다.)

    http://xunitpatterns.com/Test%20Double.html

     

    결론은 단위테스트에서 정답은 없다. 하지만, 같이 일하는 동료와 정의를 명확히 하는 것이 중요할 것 같다. 

     

     

     

     

    ###

     

    Reference 

    - http://sonseungha.tistory.com/639

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

    - https://martinfowler.com/bliki/TestDouble.html

    - https://enterprisecraftsmanship.com/posts/dry-damp-unit-tests/

     

    bliki: TestDouble

    Test Double is generic term for fakes, mocks, stubs, dummies and spies.

    martinfowler.com

    -

    반응형

    'Spring Boot > 테스트' 카테고리의 다른 글

    [사내 TestContainer 적용] Spring boot 통합테스트 도입기  (4) 2023.01.06
    JUnit이란?  (0) 2022.01.05
Designed by Tistory.