테스트 주도 개발 패러다임을 따를 때 정적 메서드, 클래스, 싱글톤을 절대 ​​사용해서는 안 되나요?

StackOverflow https://stackoverflow.com/questions/5486562

문제

프로젝트에서 단위 테스트를 구현하려고 할 때 정적 메서드, 정적 클래스 및 싱글톤이 해롭다는 내용을 읽었습니다.TDD 패러다임을 따를 때, 그것들이 존재했다는 사실을 잊어버리고 다시는 사용하지 말아야 할까요, 아니면 가끔 사용해도 괜찮을까요?

도움이 되었습니까?

해결책

절대로 말하지 마십시오 - 정적 클래스와 메서드가 도구 상자에 자리를 잡습니다.

, 그 클래스가 분리하고 테스트하거나 테스트하거나 테스트하는 것에 따라 테스트하려는 클래스가 정적 클래스 또는 메소드에 따라 다르므로, 그 정적 종속성에서 시트를 격리시키는 테스트를 작성할 수 없습니다. 테스트 코드를 실행하면 정적 통화가 계속 사용됩니다. 때로는 이것이 괜찮습니다. 그러나 때로는 종속성이없는 시트의 논리 만 테스트하는 격리 된 테스트를 만들고 싶습니다 (보통 조롱 또는 이와 유사한 기술을 통해).

일반적으로 나는 개인적으로 정적 클래스와 방법을 비교적 비교적으로 사용합니다.

싱글 톤이 어떻게 구현되는지의 성격으로 인해 단위 테스트를 위해 SUT를 격리하는 데 유사한 문제가 발생합니다. 또한 GOF Singleton 개념은 소프트웨어 개발자의 특정 비율에 의해 나쁜 관행으로 간주됩니다. 나는이 정서에 동의하지만이 주제에 거의 합의가 없어집니다. Google의 빠른 검색은 아마도 GOF 싱글 톤 패턴의 장단점과 단점에 대해 꽤 좋은 아이디어를 제공 할 것입니다.

다른 팁

  1. 그들이 존재했던 적이 있다는 것을 잊어야 합니까?아니요.
  2. 클래스의 기능에 투명한 방식으로 코드에 통합되도록 해야 합니까?예.

마지막 부분을 더 자세히 설명하려면 코드 내 싱글톤에서 값을 검색하는 대신 생성자 인수 내에서 값을 초기화해 보세요.생성자가 너무 커지면 싱글톤을 사용하지 않고 클래스를 테스트할 수 있도록 생성을 위한 팩토리 메서드를 만듭니다.그것이 문제가 있는 것으로 판명되거나 싱글톤이 변경 가능한 상태인 경우(두렵지만 저야말로 저입니다) 싱글톤을 테스트에 최대한 쉽게 통합할 수 있도록 시도해 보세요.

단지 4시간 동안 주식 시세 블록의 표준 편차를 계산하는 클래스의 메서드를 테스트하기 위해 전체 구성 파일을 생성할 필요는 없습니다.너무 많은 일이군요.그러나 싱글톤을 데이터로 채울 수 있고 다른 클래스가 구성 파일을 읽고 해당 데이터를 채우는 방식으로 작성되었다면 큰 진전을 이룬 것입니다.

정적 메서드에 관해서는 전역 상태에 대해 걱정할 필요가 없다는 조건에 따라 작성할 수 있는 가장 쉽게 테스트할 수 있는 메서드라고 주장하고 싶습니다.정적은 다음과 같습니다. y = f(x) 이는 단순해 보이지만 어떤 로컬 상태 전환도 주어진 불변성을 변경할 수 없다는 사실의 기초가 됩니다. x 너는 항상 같은 것을 얻을 것이다 y.

소프트웨어 엔지니어링 연습과 마찬가지로 어떤 상황에도 최종적인 해결책이 없습니다.따라서 정적 방법, 정적 클래스 및 싱글 톤을 배제해서는 안됩니다.TDD의 목적은 당신의 삶을 더 쉽게 만드는 것입니다. TDD로 더 많은 일을 할 때 코드가 정적 메소드 (... 등)를 사용하는 경우에도 코드가 여전히 테스트 할 수 있습니다.

규칙은 살기를 좋아합니다 : 코드를 쉽게 읽을 수 있고 디자인이 우아한 한 사용자가 원하는 것을 사용하십시오.당신이 어떻게 달성하는 방법은 당신에게 달려 있습니다.여전히 우아한 코드를 제공 할 수 있다면 Gotos를 사용하는 것도 사용할 수 있습니다.

나는 그 정적 메소드를 읽었습니다 ... 단위 테스트를 구현하려고 할 때 악의

나는 그것을 결코 읽지 못했습니다. 참조를 제공 할 수 있습니까? 그리고 나는 그것을 분쟁 할 것입니다. 나는 테스트 정적 메소드 (함수)를 항상 사용하고 문제없이 테스트합니다.


편집

정적을 참조 해 주셔서 감사합니다. 방법은 테스트 가능성에 대한 죽음 : 그 기사는 쓰레기입니다.

정적 메소드의 기본 문제는 절차 적 코드입니다. 절차 코드를 테스트하는 방법을 모르겠습니다.

자동자가 단위 테스트에 대해 많이 알지 못함을 나타냅니다. 물론 단위 테스트 절차 코드를 사용할 수 있습니다.

인스턴스화 중에는 실제 종속성을 대체하는 모의 / 친구와 의존성을 연결합니다.

이것은 핵심 실수입니다. 단위 테스트 모의 객체가 필요하다는 생각입니다. 그것은 그렇지 않습니다. 어쨌든, 모의 객체를 테스트중인 정적 메소드에 인수로 전달할 수 있습니다. 종속성 주입에는 생성자가 필요하지 않습니다. 자세한 내용은 질문에 대한 답변 답변 "정적 메소드 : 언제 그리고 언제 "

정적 메소드가 다른 정적 메소드를 호출하면 호출 된 메소드 종속성을 재정의하는 방법이 없습니다.

true하지만 무의미합니다. 정적 방법 A 은 정적 방법 의 정적 방법을 호출한다면, 그것은 a 의 방법의 이다. 따라서 b 에 대한 호출을 가로 챌 수있는 을 시도하는 사업이 없습니다. 단위로 a 을 치료하십시오.

응용 프로그램이 아무 것도 없지만 정적 메소드

Strawman 주장. 현대적인 단위 테스트의 맥락에서 분명히 우리는 정적 메소드만으로 OO 프로그램에 대해 이야기하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top