-
JaCoCo를 사용하여 Randoop의 code coverage 확인하기Software Testing 2020. 10. 23. 17:18
Java 프로그램을 대상으로 유닛 테스트를 자동으로 생성하기 위해서 Randoop을 사용중이다.
Randoop이 유닛 테스트를 생성할 때에 code coverage를 확인하고 싶어서 JaCoCo를 사용해서 알아보았다.
예제에서 사용한 repository는 아파치 재단의 commons-csv repository다.
Randoop은 이미 설치되어 있다고 가정하겠다.
1. JaCoCo 다운받기
JaCoCo - Java Code Coverage Library의 공식홈페이지 (www.eclemma.org/jacoco/) 에 가서 제일 최신버전으로 다운로드 받으면 된다.
2. JaCoCo Path 지정해주기
JaCoCo 파일의 lib 폴더에 들어가면 7개의 jar 파일이 있다. 현 상황에서 사용할 jar 파일은 'jacocoagent.jar', 'jacococli.jar' 두 개이다.
명령어를 입력할 때에 JaCoCo의 Jar 파일들을 하나하나 입력하기 귀찮으니 Jar 파일들의 주소를 간단하게 입력할 수 있게 지정해주면 좋다.
나는 OSX를 사용하기 때문에
vim ~/.bash_profile
위 명령어로 bash_profile 파일의 맨 아래에
jacocoagentJar=/Users/user/Projects/Capstone/jacoco/lib/jacocoagent.jar jacococliJar=/Users/user/Projects/Capstone/jacoco/lib/jacococli.jar
아래와 같은 jar 파일들이 있는 주소를 입력해주고
source ~/.bash_profile
위 명령어로 ${jacocoagentJar} 와 ${jacococliJar}를 command line에 입력할 때에 해당 주소가 적용되게 한다.
3. Randoop 테스트를 생성할 때에 code coverage 측정
기존에 Randoop 테스트를 생성할 때에는 나는 아래와 같은 명령어를 사용했다.
java -classpath ${RANDOOP_JAR}: randoop.main.Main gentests —classlist=myclasses.txt
이제 테스트를 생성하면서 code coverage를 측정하기 위해서 JaCoCo를 사용하는 option ( -javaagent:${jacocoagentJar} )도 추가해주면 된다.
java -classpath ${RANDOOP_JAR}: -javaagent:${jacocoagentJar} randoop.main.Main gentests —classlist=myclasses.txt
그러면 해당 폴더에 jacoco.exec 파일이 생성되는 것을 확인할 수 있다.
4. jacoco.exec파일로 html 파일 생성
jacoco.exec 파일은 binary 파일이여서 이 파일만으로는 인간의 눈으로 code coverage에 대한 정보를 알기 쉽지 않다. IntelliJ나 Eclipse를 사용하면 html로 변환하지 않아도 code coverage 정보를 확인할 수 있는 것 같다. 하지만 html로 정리된 code coverage 정보를 보고 싶기 때문에 아래의 명령어를 사용했다.
#java -jar ${jacococliJar} report —classfiles [class가 있는 폴더] jacoco.exec —html [html을 생성할 주소] java -jar ${jacococliJar} report —classfiles . jacoco.exec —html .
그러면 html이 생성되게 지정한 폴더에 index.html이 생성된 것을 확인할 수 있다.
이 index.html을 열면 code coverage를 한 눈에 확인할 수 있다.