TDD

2010-02-11 5 views
6

동안 너무 쉬울 수있는 테스트를 제거해야합니까? 저는 TDD 방식을 고수했습니다. 그래서 나는 몇 가지 검사를했고 모두 실패합니다. 이제 구현 중입니다. 그러나 이제는 구현하는 방법이 너무 간단해서 실패하는 것을 보았습니다. 특히 나는 관찰자 패턴을 구현했으며 모든 일은 등록 된 모든 관찰자에게 통보한다는 것입니다. 따라서 각 루프마다를 사용하고 알림을 호출하십시오. 이것은 확실히 너무 쉽게 부서지기 쉬운 것처럼 들립니다. 이제는 테스트를 통해 삭제해야합니까? 이것은 또한 약간의 낭비로 보입니다. 그래서 나는 너무 쉬울 수있는 방법을 시도하고 예상해야합니까?TDD

답변

7

번호

방법은 지금 휴식이 너무 간단 할 수도 있지만 그들이 미래에 수정 (및 부서) 할 필요가 없을거야 의미하지 않는다.

for (i = 0; i < observers.length; ++i) { 
    // Notify observer observers[i] 
} 

그것은 생각하는 유혹하지만,이 일반적인 실수 고려 :

+1

의견을 보내 주셔서 감사합니다. 그런 다음 나중에 지금 맡기고 메소드가 변경되면 나중에 추가해야합니다. 명백한 위험은 단위 테스트를 업데이트하는 것을 잊어 버리는 것입니다. 그러나 변경 작업을 수행 할 때도 변경 사항에 대한 단위 테스트를 작성해야하므로이를 파악해야합니다. – uriDium

+0

간단한 테스트를 그대로 두십시오. 메소드를 변경해야하는 경우 심각한 변경 사항이 발생하면 유닛 테스트를 수정해야합니다. 그러나 그것이 급격한 변화가 아니며 테스트가 작동을 멈 추면 변경에 버그가 있습니다. –

3

당신이 실패를 너무 간단하게 말을하는지

for (i = 0; i <= observers.length; ++i) { 
    // Notify observer observers[i] 
} 

을 또는이 하나

for (i = 0; i < observers.length; ++j) { 
    // Notify observer observers[i] 
} 

또는 옵서버가 올바르게 추가되지 않을 수도 있습니다. 또는 ... 또는 ...

테스트를 이미 거쳤다면 소프트웨어를 제거 할 필요가 없어지며 시간이 지남에 따라 함수가 커지는 경향이 있습니다. 따라서 단순한 것입니다. now 당신의 테스트가 당신에게 도움이되기로되어있는 바로 그 종류의 것일 수 있습니다.

+0

아니요 for Each 문. For Each 문은 언어 구조이므로 기본적으로 컴파일러를 다시 테스트합니다. 그것은 int i = 0 등 정상적인 루프라면 그럴 것입니다. – uriDium

+0

@uriDium : 네가 사용하는 언어 나 구조를 나타내지 않았으므로 공통 분모를 사용했다. 요점은 여전히 ​​있습니다. 사실상 아무 것도 잘못 되기는 너무 간단하지 않으며 기능은 시간이지나면서 복잡 해지는 경향이 있습니다. –

+2

@ T.J. 나는 동의한다, foreach를 테스트하는 포인트가 없을 수도 있지만 iterator 블록을 테스트하고있다. whiter는 커스텀 반복자가 될 수 없다고 말할 것이다. 물론 이것은 자체 테스트를 가져야한다. 그러나이 foreach를 말할 필요가있다. 테스트가 놓친 것을 찾지 못할 것입니다. –

4

예; 기본 컴파일러/가상 컴퓨터의 기능을 테스트하는 경우 테스트가 너무 간단합니다. 즉, 실행중인 컴파일러/가상 시스템의 특정 부분을 신뢰하지 않는 한 말입니다.

물론 테스트의 현실은이 질문에 대한 예/아니오 답변보다 조금 복잡합니다. 다른 답변에서 언급했듯이 이미 테스트를 작성한 경우 테스트를 삭제하지 마십시오. 그러나 코드 커버리지 컨텍스트에서 신뢰를위한 인수로 사용해서는 안됩니다.

2

정확하게 수행하고 있습니다. 먼저 실패한 테스트를 작성한 다음 수정합니다. 테스트를 혼자 맡기고 미래에 버그가 재현 될 필요가 있다고 판단되면 더 복잡한 테스트를 작성하십시오.

2

테스트가 많을수록 향후 고통이 줄어 듭니다. 그들의 단순성을 절대로 생각하지 마십시오.

0

이제 모든 테스트를 통과하면 테스트를 통과하게됩니다. 그들이 충분히 빨리 달리고 있다면 그들은 누구에게도 부담이되지 않을 것입니다.

그러나 나중에 한 번에 하나의 테스트를 수행하여 이라고 쓰고 싶을 수 있습니다. (The Three Rules 참조). 이는 코드를 개발하는 동안 디자인이 향상 될 수 있기 때문입니다.

모든 테스트가 실패하고 구현이 없으면 디자인을 수정했지만 이제는 디자인을 리팩토링하거나 개선하기 위해 싫어할 수 있습니다.

각 구현 단계가 지나친 것보다 많은 테스트가 중단 될 수 있으므로 코드를 구현하는 데 어려움을 겪었을 것으로 추측됩니다.하지만 이봐, 나는 단지 추측입니다!