문제

내 개발 팀이 사용하기 시작했습니다 모키토 '최종'으로 정의 된 클래스가 있습니다. 나는 Joshua Bloch의 효과적인 Java와 So Thread에서 읽었습니다. 최종 사용시기 모든 클래스는 최종 수정자를 사용해야합니다. 스레드에는 약간의 의견 차이가 있었지만 상속이 의미가 없다면 클래스 구성을 강요한다는 아이디어에 동의합니다.

'최종'수정자를 갖지 않아야하는 Mockito와 같은 테스트 프레임 워크를 사용하여 클래스를 테스트하려면 어떻게해야합니까? 나는 다른 사람이 개발 중에 비슷한 문제를 발견하기를 바라고 있습니다. 개발 팀이 어떤 결의안에 도착 했습니까?

테스트하려는 클래스에서 Jmock을 사용하거나 '최종'수정자를 제거하는 것과 같은 두 가지 명백한 답변이 있지만, 하나의 외부 테스트 프레임 워크 (주니어 외에)를 고수하고 싶습니다. 다른 개발자가 다음을 제거하도록 설득하기가 어려울 수 있습니다. '최종'수정 자.

감사.

도움이 되었습니까?

해결책

가장 필요한 것은 무엇입니까?

  1. 누군가가 당신의 수업에서 물려받지 않도록하거나
  2. 선택한 조롱 프레임 워크를 사용하여 코드를 테스트 할 수 있는지 확인하는 기능이 있습니까?

일반적으로, 나는 당신이 시행 할 필요가 없다고 생각합니다 (1). 저에게 테스트 가능성 (2)이 훨씬 더 중요합니다. 당신의 상황에 가장 적합한 것은 무엇입니까?

다른 팁

수업이 최종적이 되려면 인터페이스를 구현할 수 있습니다. 인터페이스는 조롱 할 수 있습니다.

다른 답변에서 이미 언급했듯이 최종 클래스를 만들어 인터페이스를 구현하고 테스트에서 인터페이스를 조롱 할 수 있습니다.

이것은 모의 개체를 사용하는 이점 중 하나입니다. 이와 같은 시나리오에서는 코드를 더 잘 구성 할 수있는 방법에 대해 생각하게됩니다. 코드베이스가 최종 클래스 (따라서 구체적인 구현에 바인딩)에 대한 많은 참조를 가지고 있다면 "인터페이스에 대한 프로그래밍"의 OO 원칙을 위반하고 더 나은 테스트 가능성이 필요하면 콘크리트 구현에 대한 의존성을 제거하기 위해 리팩토링을 생각하는 데 도움이됩니다.

모의 개체 사용에 관한이 논문 엔도 테스트 : 모의 물체로 단위 테스트 섹션 (4.4)이 있습니다 인터페이스 발견 이는 모의 개체가 인터페이스를 발견하는 데 어떻게 도움이되는지 설명합니다.

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