모르지 않다는 것은 아는것과 다르다.

Junit

테스트 더블

채마스 2022. 2. 27. 01:47

테스트 더블

  • 테스트는 깔끔함과 단정함을 유지해야한다. -> 그러기 위해서는 독립적이어야 한다.
  • 독립적이라는 것은 어떤 테스트도 다른 테스트에 의존하지 않는다는 것을 의미한다.
  • 또한 어느 순서로든, 어떤 개별 테스트라도 실행해 볼 수 있어야 한다.
  • 독립적인 테스트를 작성하려면 테스트 대상을 의존하는 것으로부터 격리(Isolation) 시켜야한다.
  • 여기서 의존하는 것으로부터 격리하면 의존하는 것에대한 대체물이 필요하다. -> 이 대체물이 테스트 더블이라고 할 수 있다.
  • 테스트 코드를 작성함에 있어서 DOC(depoended-on component; 의존 구성 요소)를 사용할 수 없다면, 테스트 더블로 대체할 수 있다.
  • 테스트 더블의 역할을 아래와 같이 정리할 수 있다.
    • 테스트 대상 코드를 격리합니다.
    • 테스트 속도를 개선합니다.
    • 예측 불가능한 실행 요소를 제거합니다.
    • 특수한 상황을 시뮬레이션합니다.
    • 감춰진 정보를 얻어냅니다.
  • Test Double의 종류

  • Dummy
  • Stub
  • Fake
  • Spy
  • Mock




Mock vs Stub vs Spy

  • Mock
    • 가짜를 말한다. 실제와 동일한 기능을 하지는 않지만 대략 이렇게 생겼고, 대충 이런 기능들이 이렇게 동작할 것이라고 알려주는 용도이다.
    • 보통 테스트에서는 호출시 동작이 잘 되었는지 확인하는 용도로 많이 쓰인다.
  • Stub
    • stub 이라는 단어는 전체중 일부라는 뜻이다.
    • 스텁은 또한 테스트중인 특정 요청에 대해 좀 더 구체적이고 준비되거나 미리 녹음 된 재생 결과를 제공하는 더미 클래스입니다.
    • 모든 기능대신 일부 기능에 집중하여 임의로 구현한다. -> 요청에 대해 미리준비된 결과를 반환한다.
    • 보통 테스트에서는 테스트하고 싶은 기능을 구현한다.
  • Spy
    • 진짜 스파이처럼 어딘가에 몰래 잠입하여, 뭔가를 훔처본다. 혹은 어떤 미션을 수행한다. -> 이럴 때에는 그 소속인양 흉내내기도 한다.
    • 테스트에서도 실제 기능을 수행하기도 하고 흉내내기도 한다.



Dummy vs Fake

  • Dummy
    • 객체는 전달되지만 사용되지 않는 객체를 말한다.
    • 예를들어 함수 파라미터에 빈 객체를 넣는 것을 예로 들 수 있다,
  • Fake
    • 동작하는 구현을 가지고 있지만 실제 프로덕션에는 적합하지 않는 객체를 말한다.




REFERENCES

'Junit' 카테고리의 다른 글

SpringBatch Test  (0) 2022.04.02
파라미터를 사용해서 테스트하기  (0) 2022.02.27
WebMvc Test  (0) 2022.02.27
단위테스트 vs 통합테스트  (0) 2022.02.27
Service 단위테스트  (0) 2022.02.27