2017-02-22 9 views
0

면책 조항; 초급 질문!별도의 파일 단위 테스트에서 "코드 실행"을보고하지만 "코드 적용 대상"이 아닌 코드 적용 범위

Project/ 
|-- main.py 
|-- test_main.py 

지금은 테스트에 포함 된 방법 내 코드를 많이보고 싶어 Jeff Knupp's blogpost on unit testing을 읽고 시험의 구색을 작성 후 : 높은 질문을 위해 단순화

내 프로젝트 구조는 다음과 같습니다 . 그래서 coverage.py를 설치하고 다음 날 혼란 :

$ 범위 보고서 main.py

이름 (스크립트에서 로그인/나에게 인쇄를 보여줍니다)

$ 커버리지 실행 main.py , Stmts, 미스, 커버

main.py, 114, 28, 75 %

것은 내가 메인 스크립트 내에서 단위 테스트를 실행도하지 않았다 않습니다이며, 나는해야한다고 생각해. 나는 수동으로 test_main.py에서 모든 테스트를 실행하고 커밋 전에는 이 아니고이 내 모든 명령문의 75 %를 차지한다는 사실을 알고있다. coverage documentation을 읽은 후 내 단위 테스트 구현을 의심하고 있습니다 ... 테스트를 실행하는 main.py에서 트리거가 필요합니까?

$ 범위 보고서 test_main.py

(나 모든 테스트에 대한 'OK'테스트 실행을 보여줍니다)

$ 커버리지 실행 test_main.py :

그래서 난 내 테스트 스크립트에서 같은 시도

이름, Stmts, 미스, 커버

test_main.py, 8, 0, 100 %

하지만이 스크립트를 실행하는 동안 테스트 문에서 내 코드의 100 %를 "맞았습니다"라고 간단히 보여줍니다. 그렇다면 어떤 코드가 사용되었는지 단순히 표시하는 경우 적용 범위가 "increase test coverage" 인 이유는 무엇입니까?

내 main.py의 상당 부분이 test_main.py에 의해 보호되고 있으며 몇 가지 기본 개념이 빠져 있음을 알고 싶습니다. 누군가가 정교 할 수 있을까요? 내 우분투 머신을 실행에


"커버리지 실행 test_main.py, 커버리지 보고서는"단지 나에게 test_main.py에 대한 보고서를 제공합니다. 내 Windows 시스템이 제공 :

이름, Stmts, 미스, 커버


main.py, 114, 74, 35 %

test_main합니다.평, 8, 커버리지 보고서는 여전히 이해가되지 않습니다

0, 100 %


TOTAL, 122, 74, 39 %는 :

  1. test_main 9 밖으로 커버 코드의 134 라인과 주요 커버리지에서 10 기능 중 하나가 35 %가 아니다.
  2. 왜 이것이 test_main의 커버리지를보고하는 것인가? 이것들은 테스트이며 이것이 100 % 모든 테스트를 실행하여 내 cov를 확인합니다. erage ...
  3. 나는 여기에 뭔가 잘못하고있다. 코드 자체로 테스트를 합산하는 동안 통찰력을 얻지 못하고 초보자 의견이 틀리면 "커버리지"의 평균을 계산하는 bollocks를 보게된다.
+0

코드를 보지 않고도 대답하기가 어렵습니다. 모든 coverage.py는 실행 한 코드와 실행할 수있는 코드를 알려주고 차이점을 보여줍니다. 두 개의 보고서를 보았습니다. 둘 다 main.py에 대한 것이지만 첫 번째 보고서에는 114 개의 명령문이 있고 두 번째 보고서에는 8 개의 명령문이 있다고 표시됩니다. 그건 바뀌면 안된다. 세부 사항을 재확인 할 수 있습니까? –

+0

@NedBatchelder 죄송합니다. 작은 실수 - 하단 보고서는 test_main.py와 관련이 있습니다. 나는 여전히 * 테스트 * 컨텍스트에서 커버리지가 얼마나 유용한 지 이해하지 못하고, 어떤 코드가 실행되지 않거나 다른 용도로 사용되는지를 확인하는 데 유용하다. 단위 테스트를 통해 내 코드의 일부가 * 다루어지는 (따라서 내가 생각한 범위 ...) 통찰력을 원하지만, 이것은 단순히 어떤 코드가 2 개의 개별 보고서에서 실행되었는지를 보여줍니다. 그래서 내가 cover.py로 원하는 것을 성취 할 수있는 유일한 방법은 test_main.py에 모든 main.py 코드를 복제하고 스크립트 내에서 테스트하는 것입니다. – MarcelTon

+0

coverage.py를 사용하여 테스트 슈트의 실행을 측정합니다. 그런 다음 제품 코드에서 실행 된 줄과 실행되지 않은 줄을 알려줍니다. 이렇게하십시오 : "coverage run test_main.py; coverage report". 보고서를 하나의 파일로만 제한하지 않으려면 범위 보고서에 파일 이름을 넣지 마십시오. –

답변

0

내 질문에 대답하고 닫으려면 - 여전히 꽤 많은 적용 논리에 동의하지 않지만 35 %는 정확하며 단순히 가져올 때 줄을 지적하기 위해 @Ned를 계산해 주셔서 감사합니다. 또한 최상위 레벨 파일 설명, argparser 및이 백분율까지 이르는 함수에 대한 주요 참조를 포함합니다. 이 코드는 코드 라인 114 개 중 최대 40 개입니다. 직접 가져 오는 함수 자체가 개 코드 라인 인 경우에도 마찬가지입니다.

테스트 문에서 모든 가져 오기를 사용하지 않았기 때문에이보고 방법이 마음에 들지 않습니다. argparser는 변경되지 않았고 여전히 의미있는 논의가 이루어졌습니다. 이것들이 "보인"또는 "통과"되었지만 실제로는 "테스트에 의해 커버되지"않는다고 말하십시오.

는 또한 과 동일한 방법으로 동일한 기능 ... A (35 + 100 + 100)/3 = 78 % 커버리지 평균 대신 결과 테스트는 다른 이름 test_main_2.py을 다른 시험 범위 달렸 이전 (35 + 100)/2 = 68 % 적용 범위.

그러나 나는 더 정확한 방식으로 숫자를 해석 할 수 있도록 적용 범위 (평균)를 계산하는 방법을 이해합니다. 어쩌면 이것은 초보자가 자신의 첫 번째 결과를 해석하는 데 도움이 될 수 있습니다.