2014-08-31 2 views
1

여러 번 "싱글 톤은 나쁜 습관입니다. 정적 메서드는 나쁜 습관입니다."내가 여러 번 볼 수있는 이유는 "테스트하기 어렵다"입니다.왜 정적 메서드가 테스트를 제외하고 나쁘다

하지만 클래스를 인스턴스화하지 않고 작업을 수행 할 수 있다고 생각하는 경우가 종종 있습니다.

편집 : 단지 테스트하기 때문에, 누구든지 그것은 의미와 expressing intent에 대한 질문입니다 예를

+0

포함하는 클래스를 스텁 처리 할 수 ​​없습니다. 즉,'static' 메소드를 사용하는 모든 코드 조각은 그대로 구현됩니다. 조롱은 인스턴스 메소드만큼 쉽지 않습니다. –

+0

다시 테스트 : 조롱, 스텁. 테스트와 관련없는 이유를 찾으십시오. –

+0

처음에는 private 메소드를 포함한 구현 세부 사항을 테스트하지 않기 때문에 private 메소드에 대한 인수는 부적합합니다. 예. 코드를 테스트하지 않으려는 경우 많은 정적 메소드를 사용할 수 있습니다. 그 길로 가고 싶니? –

답변

4

은 "그들은 테스트 어차피 개인 방법이 너무 나쁜"것을 확인할 수 있습니다.

정적 메서드는 본질적으로 나쁘다는 점을 제외하고는 테스트하기가 어렵습니다. 나쁜 부분은 새로운 인스턴스를 만드는 것을 피하기 위해 정적 인 방법을 사용하여 다른 프로그래머를 혼란스럽게합니다.

클래스과 관련이 있고 개별 인스턴스가 아닌 경우 (예 : 공장 방법과 비슷 함) 모든 방법으로 고정 된 값을 사용하십시오. 그러나 메소드가 의미 적으로 개별 인스턴스에 속하면 비 정적 메소드를 사용하십시오.

1

정적 방법은 일반적으로 시험 문제뿐만 아니라, 글로벌 변수와 거의 같은 이유로 눈살을 찌푸리게 :

  • 정적 방법은 그래서 항상 스레드 안전하지 않습니다 특정 클래스 인스턴스에 관련되지 않습니다.
  • 많은 통계 방법을 사용하는 시스템은 종종 확장되지 않습니다.
  • 클래스의 정적 메서드 호출과 클래스 인스턴스 멤버 간의 혼합으로 인한 혼란은 유지 관리 문제를 일으킬 수 있습니다.
관련 문제