---
schema_version: "1"
id: e7dd3a06760b5c5567f08d581a8640ccdaef10e8df0b035aa2850b9c3d4b3e00
title: Maven Configuration for Coverage
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/munit/2.3/coverage-maven-concept.md
canonical_url: https://docs.mulesoft.com/munit/2.3/coverage-maven-concept
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 8713e6a60d93cd19304aae80202b9690ceb2f9d1784983c1c1d0551698c951f2
description: MuleSoft Documentation Site
release: "2.3"
latest: false
---
---
product: MUnit
version: 2.3
---

# Maven Configuration for Coverage

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

Since MUnit 2.x, the coverage report goal is integrated with the maven reporting section. Coverage
Reports are generated during Maven’s `site` lifecycle, during the `coverage-report` goal.

The following configurations apply only when you execute your MUnit tests using the Maven plugin.
They do not apply when running tests from Studio.  
To run coverage reports in Studio see [Using Coverage in Studio](https://docs.mulesoft.com/munit/2.3/coverage-studio-concept).

MUnit Coverage - Sample Maven configuration

```xml
<plugin>
    <groupId>com.mulesoft.munit.tools</groupId>
    <artifactId>munit-maven-plugin</artifactId>
    <version>${munit.version}</version>

    <executions>
        <execution>
            <id>test</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
                <goal>coverage-report</goal>
            </goals>
        </execution>
    </executions>

    <configuration>
        <coverage>
            <runCoverage>true</runCoverage>
            <failBuild>false</failBuild>

            <requiredApplicationCoverage>75</requiredApplicationCoverage>
            <requiredResourceCoverage>50</requiredResourceCoverage>
            <requiredFlowCoverage>50</requiredFlowCoverage>

            <formats>
                <format>console</format>
                <format>html</format>
            </formats>
        </coverage>
    </configuration>
</plugin>
```

## Coverage Report Types

When enabling MUnit Coverage, you see a summary report in the console. By default, no other action
is taken:

```console
===============================================================================
MUnit Coverage Summary
===============================================================================
 * Resources: 2 - Flows: 3 - Processors: 4
 * Application Coverage: 75.00%
====================================================================================
```

MUnit Coverage offers four types of reports:

- Console report  
  The console report is printed to the console. It works with the summary report and shows an
  overview of the MUnit run, with a count of all resources, flows, and processors, as well as the
  overall application coverage level, and warnings and errors if any.

- HTML report  
  The HTML report shows the same information as the console report, but formatted to fit any web
  browser. It is available in the `${application.path}/target/site/munit/coverage/` path.+

- JSON report The JSON report shows the same information as the HTML report, but in a JSON format.
  It is available in the `${application.path}/target/site/munit/coverage/munit-coverage.json` path.+

- The SONAR report shows the same information as the HTML report, in a SonarQube format.

To enable the report generation, add the following configuration:

MUnit Coverage - Report Configuration

```xml
<coverage>
    <runCoverage>true</runCoverage>

    <formats>
        <format>console</format> (1)
        <format>html</format>    (2)
        <format>json</format>    (3)
        <format>sonar</format>   (4)
    </formats>
</coverage>
```

<table><tbody><tr><td><i data-value="1"></i><b>1</b></td><td>Console report</td></tr><tr><td><i data-value="2"></i><b>2</b></td><td>HTML report</td></tr><tr><td><i data-value="3"></i><b>3</b></td><td>JSON report</td></tr><tr><td><i data-value="4"></i><b>4</b></td><td>SONAR report</td></tr></tbody></table>

You can choose to have either none, one, or all the report types added to your configuration.

To configure, for example, the JSON report generation, you must to add the following configuration
to your `pom.xml` file:

```xml
<coverage>
    <runCoverage>true</runCoverage>

    <formats>
        <format>json</format>
    </formats>
</coverage>
```

## Set up a Minimum Coverage Level

One of the features of MUnit Coverage is to fail the build if a certain coverage level is not
reached.

MUnit Coverage handles three different levels:

- **Application**: The overall coverage of all your application.

- **Resource**: The coverage level of each individual Mule configuration file.

- **Flow**: The coverage of event processors in each flow.

To define the required coverage levels:

MUnit Coverage - Require Coverage

```xml
<coverage>
    <runCoverage>true</runCoverage>
    <failBuild>true</failBuild>

    <requiredApplicationCoverage>75</requiredApplicationCoverage> (1)
    <requiredResourceCoverage>50</requiredResourceCoverage>
    <requiredFlowCoverage>50</requiredFlowCoverage>
</coverage>
```

<table><tbody><tr><td><i data-value="1"></i><b>1</b></td><td>Each value represents a percentage.<br>If a percentage is not defined, it defaults to <strong>-1</strong>, which indicates that no requirements are defined for said level so the build will not fail due to low coverage.</td></tr></tbody></table>

If you define coverage levels but set the property `failBuild` to **false**, and then the levels are
not reached, a warning shows up in the MUnit coverage summary:

```console
===============================================================================
MUnit Coverage Summary
===============================================================================
 * Resources: 2 - Flows: 3 - Processors: 4
 * Application Coverage: 75.00%

----------------------------- WARNING --------------------------------------
 * Flow: file2.xml -> file2Flow1 coverage is below defined limit. Required: 50.0% - Current: 00.00% (1)
====================================================================================
```

<table><tbody><tr><td><i data-value="1"></i><b>1</b></td><td>Warning detailing which coverage level was not met, and where it happened.</td></tr></tbody></table>

## Ignore a flow or a file

Another feature is the ability to ignore either a flow or a file. This way, the ignored resource:

- Does not count as coverage data.

- Does not affect the overall number of message processors.

- Does not cause a build to fail if the flow is not tested or if the flow does not reach coverage
  metrics.

To ignore flows and files:

MUnit Coverage - Ignore both flows and files

```xml
<coverage>
    <runCoverage>true</runCoverage>
    <failBuild>true</failBuild>

    <requiredApplicationCoverage>100</requiredApplicationCoverage>
    <requiredResourceCoverage>100</requiredResourceCoverage>
    <requiredFlowCoverage>100</requiredFlowCoverage>

    <ignoreFlows>
        <ignoreFlow>flow-1</ignoreFlow>
        <ignoreFlow>flow-2</ignoreFlow>
        ...
        <ignoreFlow>flow-n</ignoreFlow>
    </ignoreFlows>

    <ignoreFiles>
        <ignoreFile>mule-config-1.xml</ignoreFile>
        <ignoreFile>mule-config-2.xml</ignoreFile>
        ...
        <ignoreFile>mule-config-n.xml</ignoreFile>
    </ignoreFiles>
</coverage>
```

## See Also

- [Coverage Report](https://docs.mulesoft.com/munit/2.3/munit-coverage-report)
