단위테스트 안티패턴 모음

단위테스트 안티패턴

1. 비공개 메서드 단위테스트

  • private 메서드를 단위테스트 해야하는가?
  • 비공개 메서드를 직접 테스트 하기보다는, 포괄적인 메서드 호출로 간접적으로 테스트 하는것이 좋다.
  • 비공개 메서드가 너무 복잡하다면, 별도 클래스로 도출해야하는 리팩토링 징후로 볼 수 있다.

2. 테스트를 위한 비공개 상태(필드) 공개

  • 테스트만을 위해 비공개 상태를 공개시키는것이 타당할까?
  • 테스트는 제품코드와 정확히 같은 방식으로 대상 시스템과 상호작용해야하고 특별한 권한이 있으면 안된다.

3. 도메인 로직을 테스트에서 유출

  • 도메인 내부 로직을 테스트에서 그대로 수행, 비교하는것이 좋은 테스트 방식일까?
  • 제품코드의 알고리즘은 프로덕션 코드 도메인로직에만 두어야한다.
  • 테스트에서는 내부로직이 아닌, 결과를 검증하는것이 좋다.

4. 테스트만을 위한 코드 추가

  • 프로덕션 코드에 테스트만을 위한 코드를 추가해도 괜찮을까?
  • 프로덕션 코드에 테스트코드와 제품코드가 혼재되어 관리비용이 증가하게 된다.
  • 필요하다면, interface 화 해서 테스트만을 위한 상속 구현체를 만들어라

5. 구체 클래스를 mocking 하기

  • 인터페이스가 아닌 구체 클래스를 직접 mocking 해서 처리해도 괜찮을까?
  • mocking이 필요하다면, 클래스를 인터페스화해서 mocking 클래스를 직접 구현해라.

6. 시간 처리하기

  • 테스트환경에서 시간으로 인해 달라지는 결과를 얻는경우?
  • 시간을 값으로 넘겨 처리하는 방식으로 리팩토링하는것이 좋다.