문제

현재 JDBC 드라이버의 구현을 쓰고 있습니다 (예, 당신은 그것을 올바르게 읽습니다) TDD 방식 으로이 시점에서 클래스 스터브 만 완료했지만 약간의 기능 만 완료했지만 그 이후로 나에게 발생했습니다. Statement 슈퍼 클래스입니다 PreparedStatement 슈퍼 클래스입니다 CallableStatement, 해당 클래스의 구현에 대한 테스트를 작성하기 시작하면 어떻게해야합니까?

  1. 테스트 스위트를 만듭니다 Statement 그런 다음 추가 테스트를 위해 해당 제품군을 확장하십시오 PreparedStatement 그런 다음 똑같이합니다 CallableStatement.
  2. 슈퍼 클래스 (ES)에서 상속 된 메소드를 개별적으로 무시하는 각 구현을 개별적으로 테스트하십시오.
  3. 각 구현 클래스에 대해 모든 단일 방법을 개별적으로 테스트합니다. 결국 구현에 따라 일부 상속 된 방법이 다르게 작동 할 수 있습니다. 이것의 가벼운 변형은 구현이 사용하는 모든 상속 된 방법을 테스트하는 것입니다.

2 위는 가장 자연스럽게 느껴지지만 세 번째에 넣은 이유 때문에 그렇게하는 것이 현명한 지 확실하지 않습니다. 그래서, 무엇을 하는가 내가해야한다고 생각합니까?

도움이 되었습니까?

해결책

나는 구체적으로 대체 1을 수행하지 않을 것입니다 (테스트 클래스 계층 구조가 실제 클래스 계층과 동일하게하도록 함).이 경우 각 테스트 서브 클래스에 대해 동일한 테스트를 반복적으로 실행한다는 것을 의미합니다. 또한 일반적으로 일반 유틸리티베이스 클래스 이외의 서브 클래스 테스트 클래스에 회의적입니다.

나는 일반적으로 계층 구조에서 각 클래스에 대해 1 개의 테스트를합니다. 따라서 기본 클래스에는 별도의 테스트 (일반적으로 테스트에 사용되는 테스트 로컬 개인 서브 클래스가 포함되어 있음)가 있으며 서브 클래스에 대한 지식을 사용하여 각 서브 클래스에 대한 적절한 테스트를 작성합니다. 커버리지에서 누락 된 테스트가 실행되는 것을 볼 수 있으므로 보통 선불로 정식화되지 않았습니다.

다른 팁

"각 구현 클래스에 대해 모든 단일 방법을 개별적으로 테스트하십시오"

특히, 슈퍼 클래스 방법을 올바르게 무시하지 않는 것은 일반적인 버그입니다. 서브 클래스의 저자는 슈퍼 클래스에 대해 가정합니다. 슈퍼 클래스가 변경되고 하위 클래스가 파손되었습니다.

구현에 대한 지식을 바탕으로 편안하게 느낄 수 있도록 충분한 테스트를 제공하십시오. 단위 테스트를 완전히 블랙 박스 테스트로 취급하지 않습니다. 기본 클래스가 가상 메소드를 호출하지 않는다는 것을 알고 있다면 (또는 적어도 재정의되지 않은) 사실에 유의하지만 이미 가지고있는 단위 테스트를 효과적으로 복제하지는 않습니다.

단위 테스트는 확실히 극단으로 가져갈 수 있습니다. 비용이 많이 드는 노력으로 항상 얻는 가치의 균형을 유지하는 것이 좋습니다.

TDD를 사용하면 테스트 방법, 행동 또는 코드의 기능을 목표로하지 않아야합니다. 따라서 서브 클래스를 구현할 때는 기본 클래스와 다른 동작 만 테스트하는 것으로 제한 할 수 있습니다. 의심스러운 경우 새로운 테스트를 작성하십시오.

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