2013-06-14 3 views
1

최근에 저는 JetBrains에서 DotCover를 평가 해 왔으며 재미있는 질문을하게되었습니다. 내가 원하는 이상적인 인터페이스에 대한 테스트를 쓸 것이다코드 커버리지 도구 및 TDD

  • : TDD 다음

    .
  • 빨강
  • 테스트를 통과하는 가장 간단한 구현을 만듭니다.
  • 녹색
  • DotCover를 실행하면 100 %가 표시됩니다.
  • 다음 복제/리펙터를 제거합니다. 내가 더 해요로 리팩토링의 과정 나는 그것의 자신의 클래스에 몇 가지 기능을 이동하면

DotCover을 다시 실행 (건조 또는 SRP 준수를 위해 말), 그리고, 커버리지 %는 떨어질 것 새로운 클래스를 직접 테스트하는 시간이 길어집니다.

나는 TDD의 교의를 절대적인 편지에 따르고 있기 때문에 약간 이상해 보입니다. 코드의 모든 행을 수정하거나 주석 처리하면 테스트가 중단되지만 아직 발견되지 않은 것으로보고됩니다.

내가 누락 된 항목이 있습니까?

+1

논리를 새 클래스로 이동하면 새로운 클래스가 이미 호출 한 코드에서 가져온 코드로 덮여 야합니다. 저는 DotCover에 익숙하지 않지만 Visual Studio를 사용했습니다. 단위 테스트의 작성 방법이 아닌 코드가 실행되었는지 여부 만 기준으로합니다. – Matthew

+0

Eh? 왜 아래 표를 던지겠습니까? 문제의 코드는 테스트에서 실행 중이지만 다루지 않은 코드로 표시됩니다. 다른 테스트 도구를 사용해 보겠습니다. –

+0

나는 투표하지 않았다. – Matthew

답변

2

DotCover는 단위가 단위로 테스트되기를 원할 수 있으므로 간접 시험에 대한 패널티가 필요합니다. 테스트중인 시스템 만 테스트에서 고려해야한다는 주장에 대한 장점이 있습니다. 클래스를 추출했지만 호출자를 통해 테스트하면 호출자를 테스트하고 (틀림없이) 새 클래스를 조롱해야하며 새 클래스에 대한 실제 단위 테스트를 사용하여 독립적 인 단위로 테스트합니다.

+0

이것은 내 관심사였습니다. 개별 단위가 현재 다른 소비자에 의해 사용될 가능성이 높다면 서로 분리 된 단위로 테스팅 단위의 장점을 이해할 수 있습니다. 그러나 이러한 유닛이 내부로 표시되고 현재 테스트에서 모든 코드가 실행되면 추가 테스트가 유지 관리 부담이 될 것입니다. public에 대한 변경자를 변경해도 테스트가 중단되지 않는다고 가정합니다. 다른 사용자에게 노출됩니다. 두 가지 방법의 장점이나 단점에 대해 의견이 있습니까? –

+0

죄송합니다, 잘 모르겠습니다. 이것에 대한 답변을 충분히 얻을 수 있습니다. 진정으로 다른 클래스에 유용한 클래스는 다른 클래스의 내부 클래스이거나 개인 클래스 여야합니다. 테스트 용으로 public으로 설정해야하는 것은 아닙니다. –

+0

@ CarlManaster 나는이 것에 대해 당신과 동의한다. 또한 당신이 단위를 정의하는 방법에 달려있다. 나에게 한 단위는 하나 이상의 클래스이다. 제 동료 중 일부는 동의하지 않으며 모든 수업을 자체적으로 테스트 해 보았습니다. 나는 낭비적이고 어리 석다는 생각이 들었습니다. 그러면 더 많은 조롱/스터 빙이 정상적으로 요구 될 것입니다. –