2010-07-23 3 views
25

내가 발견 한 그 내가 여기에 설명 된 방법을 사용하여 테스트를 추적 할 때 나는 우리의 파이썬 코드에 doctest를 많이 가지고 있더라도 :단위 테스트에서 코드 커버리지 보장?

traceit

나는이 코드의 특정 라인이 있다는 것을 발견을 결코 실행되지 않았습니다. 현재 추적 로그를 살펴보고 실행되지 않는 코드 블록을 식별 한 다음 이러한 특정 블록을 실행하기 위해 여러 가지 테스트 사례를 제시하려고합니다. 당신이 상상할 수 있듯이, 이것은 매우 시간이 많이 걸리고 나는 이것이 잘못된 길로 가고 있는지, 그리고 당신이이 문제를 다룰 다른 조언이나 제안을 가지고 있는지 궁금해하고 있습니다. 충분히 복잡하다.

답변

28

coverage.py은 매우 유용한 도구입니다. 무엇보다도 branch coverage을 제공합니다.

+11

이 답변은 'coverage.py'사용법에 대한 간단한 예를 제공하면 더 유용 할 것입니다. – SimplyKnownAsG

+6

@SimplyKnownAsG 링크 된 페이지의 앞면과 가운데에 빠른 시작 섹션이 있으며 샘플 사용법이 포함되어 있습니다. 새로운 버전이 나올 때마다 변경 될 수있는 복사 및 붙여 넣기 문서가 아니라 단지 링크 만하는 것이 좋습니다. –

+1

'coverage.py' 사용법 : https://github.com/audreyr/how-to/blob/master/python/use_coverage_with_unittest.rst – dm295

18

귀하는 귀하의 테스트 케이스에 대해 100 % 코드 커버리지를 얻는 것에 대해 독단적 인 태도를 취하고 있습니까? 그렇지 않다면 코드의 모든 라인을 만지는 것이 코드에서 버그를 찾는 가장 효과적인 방법이라고 생각합니까? 무한한 시간과 인적 자원이 없다고 가정 할 때, 개발자가 알기 힘든 부분에 중점을두고 모든 사소한 코드를 합리적으로 테스트하는 데 중점을 두어야합니다.

코드 커버리지는 훌륭합니다. 코드 조각을 만질 때까지 테스트 할 수 있다고 말할 수는 없기 때문에 코드 조각을 터치하여 테스트 한 코드를 만지작 거리지는 않습니다. 코드 커버리지에 위배되는 것은 아니지만 테스트가 완료되는 시점을 알려주는 메트릭으로 코드 커버리지를 사용하는 것은 너무 쉽습니다. 나는 그것이 실수 일 것이라고 생각한다.

+7

이것은 훌륭한 코멘트입니다. 제 상황에서는 프로그래머가 아닌 과학자가 파이썬 코드를 작성합니다. 결과적으로 과학자가 매우 똑똑하더라도 코드는 매우 잘 설계되지 않았습니다. 이는 최종 통합과 테스트가 악몽이라는 것을 의미하며이 단계에서 심각한 문제를 발견하기 위해 너무 열심히 노력해야합니다. 필자는 각자 책임이있는 코드에 대해 더 나은 테스트 케이스를 작성하도록 노력하고 있으며 통합하는 테스트를 한정하는 방법으로 코드 커버리지를 사용할 계획입니다. 코드의 100 %가 손댈 필요가 없지만 도움이 될 것입니다. – reckoner

+0

100 % 적용 범위는 충분한 테스트를 보장하지는 않지만 일반적으로 충분한 테스트가 없다는 것을 나타내는 것은 아닙니다. 커버리지 모듈이'#pragma : no cover'와'#pragma : no branch'와 같은 주석을 허용한다는 것을 잊지 말자. –