0%

open cover & report generator로 C# line coverage확인하기 (.net, .net framework)

opencover

opencover 란?

오픈커버(OpenCover)는 .NET / .NET Framework 애플리케이션의 코드 커버리지를 측정하는 도구입니다.
코드 커버리지란, 프로그램이 실행될 때 실행된 코드의 비율을 의미합니다.
이를 통해 개발자는 자신이 작성한 코드가 실제로 실행되는지 확인할 수 있으며, 테스트되지 않은 코드를 찾아내어 수정할 수 있습니다.

report generator란?

ReportGenerator는 coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov, lcov과 같이
다양한 커버리지 결과파일을 사람이 읽을 수 있는 보고서로 변환합니다.
이 보고서는 커버리지 비율을 보여주며, 소스 코드의 어떤 라인이 커버되었는지 시각적으로 보여줍니다.

사전준비 : 테스트 프로젝트 준비

  1. 먼저, 테스트를 실행할 수 있는 테스트 프로젝트가 필요합니다.
    .NET framework에 대한 테스트 코드 는 아래 블로그를 참고해주세요.
    https://devscb.com/post/250/

  2. nunit console설치가 필요합니다.
    마찬가지로 아래 블로그의 “테스트 수행하기-두번째 방법 : 커맨드창” 부분을 참고해주세요.
    https://devscb.com/post/250/
    opencover

opencover로 coverage 측정하기

  1. opencover 설치 : 아래 주소에서 opencover를 다운받아 적절한 위치에 압축을 풀어줍니다.
    https://github.com/OpenCover/opencover/releases
    opencover
    이 글에서는 C:\test\opencover 에 압축을 풀겠습니다.

  2. 커맨드 창에서 아래와 같이 명령어를 입력해줍니다.

    1
    2
    3
    4
    5
    6
    "{open cover 파일경로}" ^ 
    -target:"{nunit console 파일경로}" ^
    -register:user ^
    -filter:"+[{포함시키려는 어셈블리}*]* " ^
    -targetargs:"{솔루션 경로} " ^
    -output:"{open cover결과에 대한 xml파일명}"

예를 들어, 아래와 같습니다.
주의1. ^뒤에는 띄어쓰기가 없어야합니다.
주의2. filter 에는 +[포함할어셈블리명] -[포함시키지않을어셈블리명] 과 같은 식으로 써줘야합니다.

1
2
3
4
5
6
"C:\test\opencover\OpenCover.Console.exe" ^
-target:"C:\test\NUnit.Console\bin\net35\nunit3-console.exe" ^
-register:user ^
-filter:"+[ConsoleApp*]* -[UnitTest*]*" ^
-targetargs:"C:\nunit\test\test.sln ^

opencover

  1. 그러면 아래와 같이 TestResult.xml과 results.xml 파일이 생긴것을 확인하실 수 있습니다.
    opencover

파일 내용은 아래와 같은데, 무슨 내용인지 한번에 확인하기 어렵습니다.

  1. TestResult.xml
    opencover
  2. results.xml
    opencover

앞선 파일들이 무슨 내용인지 확인하기 위해 reportgenerator를 사용하는것을 설명드리겠습니다.

report generator로 리포트 만들기

  1. reportgenerator 설치 : 아래 주소에서 reportgenerator 다운받아 적절한 위치에 압축을 풀어줍니다.
    https://github.com/danielpalme/ReportGenerator/releases
    opencover

  2. 커맨드 창에서 아래와 같이 입력해줍니다.

    1
    2
    3
    "C:\test\ReportGenerator\net47\ReportGenerator.exe" ^
    -reports:"results.xml" ^
    -targetdir:coverage_test

    -reports:”Opencover.xml” 부분은 앞선 Opencover로부터 추출한 xml파일입니다.
    -targetdir:coverage_test은 결과물을 저장할 경로입니다.

  3. 이를 실행하면, 아래와 같이 coverage_test 폴더에 결과물이 나오게 됩니다.
    이 폴더 안의 index.html을 더블클릭하면 아래와 같이 브라우저에서 좀 더 명확하게 확인할 수 있습니다.
    다만, method coverage는 유료버전을 사용하셔야 확인할 수 있습니다.

opencover

총평

iine coverage 확인하려면 너무 어려운거 같습니다.
사실 c#에 대한 line coverage 나 코드분석등을 확인하기 위한 리서치를 해보면 enterprise 버전을 쓰면 쉽게 할 수 있다고는 하는데…
회사에서 비용지원이 안되는 경우, 개인적으로 사용할때 비용을 못 쓸 경우가 있어 알아보게 되었습니다.
이번기회에 opencover / report generator를 알아보니 타 언어들에 비해 너무 힘든거 같다는 생각이 듭니다.
아마 microsoft가 폐쇄적이였어서 관련된 오픈소스 개발이 힘들고,
그러다보니 사용자도 상대적으로 적어서 뭔가 유지보수가 안되거나 사용하기가 어려운 점이 있지 않았을까 싶습니다.
이러한 개발 에코시스템 떄문에 개인적으로는 C#을 벗어나고 싶은데, 레거시가 C#으로 되어있어서 운영에 좀 답답함이 느껴집니다.