On this Page

Setting up mockito in Spring Boot

As mentioned in our introduction, we shall be using an earlier project, the schools Spring Boot CRUD project with a few modifications for the unit testing tutorial series.

Adding dependencies and plug ins to our pom

We shall make the below amends to the project on the pom.xml file.

  1. We change the project name and description by making the below amends.

               <name>mockito_project</name>

               <description>Unit testing project</description>

  1. We add the below exclusion on our spring-boot-starter-test dependency

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

            <exclusions>

                <exclusion>

                    <groupId>org.junit.vintage</groupId>

                    <artifactId>junit-vintage-engine</artifactId>

                </exclusion>

            </exclusions>

        </dependency>

  1. We add the junit dependency

<dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.12</version>

            <scope>test</scope>

            <type>jar</type>

              </dependency>

  1. On our plugins section,we add the maven sure fire plugin.

<plugin>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>2.20.1</version>

                <configuration>

                    <includes>

                        <include>**/*Tests.java</include>

                    </includes>                 

                </configuration>

            </plugin>

  1. We add the maven jacoco plug in

     <plugin>

                <groupId>org.jacoco</groupId>

                <artifactId>jacoco-maven-plugin</artifactId>

                <version>0.8.4</version>

                <executions>

                    <execution>

                        <goals>

                            <goal>prepare-agent</goal>

                        </goals>

                    </execution>

                    <execution>

                        <id>report</id>

                        <phase>prepare-package</phase>

                        <goals>

                            <goal>report</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

For reference ,the full pom.xml is as below at this point in time.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.5.5</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

    <groupId>com.school</groupId>

    <artifactId>relationships</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>mockito_project</name>

    <description>Unit testing project</description>

    <properties>

        <java.version>1.8</java.version>

    </properties>

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

 

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <optional>true</optional>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

            <exclusions>

                <exclusion>

                    <groupId>org.junit.vintage</groupId>

                    <artifactId>junit-vintage-engine</artifactId>

                </exclusion>

            </exclusions>

        </dependency>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>          

            <scope>test</scope>

            <type>jar</type>

        </dependency>      

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

        </dependency>

    </dependencies>

 

    <build>

          

        <plugins>

            <plugin>

                <artifactId>maven-surefire-plugin</artifactId>

                <version>2.20.1</version>

                <configuration>

                    <includes>

                        <include>**/*Tests.java</include>

                    </includes>                 

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.jacoco</groupId>

                <artifactId>jacoco-maven-plugin</artifactId>

                <version>0.8.4</version>

                <executions>

                    <execution>

                        <goals>

                            <goal>prepare-agent</goal>

                        </goals>

                    </execution>

                    <execution>

                        <id>report</id>

                        <phase>prepare-package</phase>

                        <goals>

                            <goal>report</goal>

                        </goals>

                    </execution>

                </executions>

            </plugin>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

                <configuration>

                    <excludes>

                        <exclude>

                            <groupId>org.projectlombok</groupId>

                            <artifactId>lombok</artifactId>

                        </exclude>

                    </excludes>

                </configuration>

            </plugin>

        </plugins>

    </build>

 

</project>

Building the project

We now build the project, either from the command prompt by running mvn clean install

or by using the build short cut on our IDE.

Once build completes successfully,we have a test coverage report in html format accessible under <project_folder>/target/site/jacoco/index.html

In our case,the index.html page looks as below

 

In the above report ,we can see that test coverage is at 0%.We need to write unit tests for our project and move our test coverage to 100% which is the safest for us since it will mean that we have tested each and every piece of code in our project and our project is fool proof of errors/bugs on production.

 

The code for this project at this stage is available at Github ,commit name: ‘mockito pom edit for unit testing’

About the Author - John Kyalo Mbindyo(Bsc Computer Science) is a Senior Application Developer currently working at NCBA Bank Group,Nairobi- Kenya.He is passionate about making programming tutorials and sharing his knowledge with other software engineers across the globe. You can learn more about him and follow him on  Github.