Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Code Coverage for JavaFX With GitLab CI

DZone's Guide to

Code Coverage for JavaFX With GitLab CI

Looking to test an application with JavaFX on GitLab CI? Let me show you how it's done...

· DevOps Zone
Free Resource

The Nexus Suite is uniquely architected for a DevOps native world and creates value early in the development pipeline, provides precise contextual controls at every phase, and accelerates DevOps innovation with automation you can trust. Read how in this ebook.

One drawback of GitLab compared to GitHub is the missing third party services like Travis CI or Coveralls. On GitLab we have GitLab CI. At first sight, it is very powerful as you can define a Docker container in which your application gets deployed and tested.

For Java, the documentation isn’t very verbose at the moment, it is hard to find good examples. Hopefully, this article may be one.

To test a Java application, you can use one of the official Java images. Unless your code depends on JavaFX which is not contained in the OpenJDK used in those images.

Docker Image to the Rescue

What’s necessary here is a Docker container with:

  • Oracle JDK 1.8 (including JavaFX)
  • Maven (to run the build)

I found a good starting point in an existing Docker image which I used as a reference and stripped down to the things listed above. You’ll find it later on in this post.

Configure Code Coverage Reporting

GitLab CI can report the code coverage of your unit tests in the build results of the web UI. You have to configure this in your project’s settings in the Continuous Integration section. But first…

Add jacoco to your pom.xml
To collect coverage information for your tests add this to your pom file.

<build>
   <plugins>
      <plugin>
         <groupId>org.jacoco</groupId>
         <artifactId>jacoco-maven-plugin</artifactId>
         <version>0.7.5.201505241946</version>
         <executions>
            <execution>
               <id>pre-unit-test</id>
               <goals>
                  <goal>prepare-agent</goal>
               </goals>
            </execution>
            <execution>
               <id>post-unit-test</id>
               <phase>test</phase>
               <goals>
                  <goal>report</goal>
               </goals>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>


Set up your project

Go to your Project Settings and find the Continuous Integration section. Use this string for Test coverage parsing:

Total.*?([0-9]{1,3})%


Image title

This regex is used after the build to parse the jacoco coverage result in percent from the console. We make sure that the coverage result is printed to the console in our .gitlab-ci.yml file.

.gitlab-ci.yml

This is the complete .gitlab-ci.yml file. Pretty short.

  • The image kaiwinter/docker-java8-maven contains JavaFX and a maven installation
  • "mvn install -B" builds and tests your application
  • "cat target/site/jacoco/index.html" prints the result of the coverage to the console
image: kaiwinter/docker-java8-maven

job1:
 script:
 - "mvn install -B"
 - "cat target/site/jacoco/index.html"

That’s It!

Image title


The DevOps Zone is brought to you in partnership with Sonatype Nexus.  See how the Nexus platform infuses precise open source component intelligence into the DevOps pipeline early, everywhere, and at scale. Read how in this ebook

Topics:
javafx ,code coverage ,java ,gitlab ,unit testing

Published at DZone with permission of Kai Winter. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}