<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--><head>
    <meta charset='utf-8'/><meta http-equiv='X-UA-Compatible' content='IE=edge'/><meta name='viewport' content='width=device-width, initial-scale=1'/><meta name='keywords' content='groovy, java, spock, testing, jqwik, pitest, junit, jacoco'/><meta name='description' content='This post looks at testing Java using Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest'/><title>The Apache Groovy programming language - Blogs - Testing your Java with Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest</title><link href='../img/favicon.ico' type='image/x-ico' rel='icon'/><link rel='stylesheet' type='text/css' href='../css/bootstrap.css'/><link rel='stylesheet' type='text/css' href='../css/font-awesome.min.css'/><link rel='stylesheet' type='text/css' href='../css/style.css'/><link rel='stylesheet' type='text/css' href='https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css'/>
</head><body>
    <div id='fork-me'>
        <a href='https://github.com/apache/groovy'>
            <img style='position: fixed; top: 20px; right: -58px; border: 0; z-index: 100; transform: rotate(45deg);' src='/img/horizontal-github-ribbon.png'/>
        </a>
    </div><div id='st-container' class='st-container st-effect-9'>
        <nav class='st-menu st-effect-9' id='menu-12'>
            <h2 class='icon icon-lab'>Socialize</h2><ul>
                <li>
                    <a href='https://groovy-lang.org/mailing-lists.html' class='icon'><span class='fa fa-envelope'></span> Discuss on the mailing-list</a>
                </li><li>
                    <a href='https://twitter.com/ApacheGroovy' class='icon'><span class='fa fa-twitter'></span> Groovy on Twitter</a>
                </li><li>
                    <a href='https://groovy-lang.org/events.html' class='icon'><span class='fa fa-calendar'></span> Events and conferences</a>
                </li><li>
                    <a href='https://github.com/apache/groovy' class='icon'><span class='fa fa-github'></span> Source code on GitHub</a>
                </li><li>
                    <a href='https://groovy-lang.org/reporting-issues.html' class='icon'><span class='fa fa-bug'></span> Report issues in Jira</a>
                </li><li>
                    <a href='http://stackoverflow.com/questions/tagged/groovy' class='icon'><span class='fa fa-stack-overflow'></span> Stack Overflow questions</a>
                </li><li>
                    <a href='http://groovycommunity.com/' class='icon'><span class='fa fa-slack'></span> Slack Community</a>
                </li>
            </ul>
        </nav><div class='st-pusher'>
            <div class='st-content'>
                <div class='st-content-inner'>
                    <!--[if lt IE 7]>
                    <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
                <![endif]--><div><div class='navbar navbar-default navbar-static-top' role='navigation'>
                            <div class='container'>
                                <div class='navbar-header'>
                                    <button type='button' class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
                                        <span class='sr-only'></span><span class='icon-bar'></span><span class='icon-bar'></span><span class='icon-bar'></span>
                                    </button><a class='navbar-brand' href='../index.html'>
                                        <i class='fa fa-star'></i> Apache Groovy
                                    </a>
                                </div><div class='navbar-collapse collapse'>
                                    <ul class='nav navbar-nav navbar-right'>
                                        <li class=''><a href='https://groovy-lang.org/learn.html'>Learn</a></li><li class=''><a href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li class=''><a href='/download.html'>Download</a></li><li class=''><a href='https://groovy-lang.org/support.html'>Support</a></li><li class=''><a href='/'>Contribute</a></li><li class=''><a href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li class=''><a href='/blog'>Blog posts</a></li><li class=''><a href='https://groovy.apache.org/events.html'></a></li><li>
                                            <a data-effect='st-effect-9' class='st-trigger' href='#'>Socialize</a>
                                        </li><li class=''>
                                            <a href='../search.html'>
                                                <i class='fa fa-search'></i>
                                            </a>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                        </div><div id='content' class='page-1'><div class='row'><div class='row-fluid'><div class='col-lg-3'><ul class='nav-sidebar'><li><a href='./'>Blog index</a></li><li class='active'><a href='#doc'>Testing your Java with Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest</a></li><li><a href='#_the_system_under_test' class='anchor-link'>The system under test</a></li><li><a href='#_testing_with_spock' class='anchor-link'>Testing with Spock</a></li><li><a href='#_mutation_testing_with_pitest' class='anchor-link'>Mutation testing with Pitest</a></li><li><a href='#_using_property_based_testing' class='anchor-link'>Using Property-based Testing</a></li><li><a href='#_more_information' class='anchor-link'>More information</a></li><li><a href='#_conclusion' class='anchor-link'>Conclusion</a></li></ul><br/><ul class='nav-sidebar'><li style='padding: 0.35em 0.625em; background-color: #eee'><span>Related posts</span></li><li><a href='./testing_permutations_combinations'>Groovy Testing with Combinations and Permutations</a></li><li><a href='./groovy-record-performance'>Groovy Record Performance</a></li><li><a href='./fun-with-obfuscated-groovy'>Fun with obfuscated Groovy</a></li></ul></div><div class='col-lg-8 col-lg-pull-0'><a name='doc'></a><h1>Testing your Java with Groovy, Spock, JUnit5, Jacoco, Jqwik and Pitest</h1><p><span>Author: <i>Paul King</i></span><br/><span>Published: 2022-07-15 08:26AM</span></p><hr/><div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p><span class="image right"><img src="img/spock_logo.png" alt="spock logo" width="100"></span>
This blog post covers a common scenario seen in the Groovy community which is
projects which use Java for their production code and Groovy for their tests.
This can be a low risk way for Java shops to try out and become more familiar
with Groovy. We&#8217;ll write our initial tests using the
<a href="https://spockframework.org/">Spock testing framework</a>, and we&#8217;ll use
<a href="https://junit.org/junit5/">JUnit5</a> later with our jqwik tests.
You can usually use your favorite Java testing libraries if you switch to Groovy.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_system_under_test">The system under test</h2>
<div class="sectionbody">
<div class="paragraph">
<p>For illustrative purposes, we will test a Java mathematics utility function
<code>sumBiggestPair</code>. Given three numbers, it finds the two biggest and then adds them up.
An initial stab at the code for this might look something like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="java">public class MathUtil {                       // Java

    public static int sumBiggestPair(int a, int b, int c) {
        int op1 = a;
        int op2 = b;
        if (c &gt; a) {
            op1 = c;
        } else if (c &gt; b) {
            op2 = c;
        }
        return op1 + op2;
    }

    private MathUtil(){}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_testing_with_spock">Testing with Spock</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An initial test could look like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">class MathUtilSpec extends Specification {
    def "sum of two biggest numbers"() {
        expect:
        MathUtil.sumBiggestPair(2, 5, 3) == 8
    }
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>When we run this test, all tests pass:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilSpecResult.png" alt="MathUtilSpec test result"></span></p>
</div>
<div class="paragraph">
<p>But if we look at the coverage report, generated with
<a href="https://github.com/jacoco/jacoco">Jacoco</a>, we see that our test
hasn&#8217;t covered all lines of code:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilJacocoReport.png" alt="MathUtilSpec coverage report"></span></p>
</div>
<div class="paragraph">
<p>We&#8217;ll swap to use Spock&#8217;s data-driven feature and include an additional testcase:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">def "sum of two biggest numbers"(int a, int b, int c, int d) {
    expect:
    MathUtil.sumBiggestPair(a, b, c) == d

    where:
    a | b | c | d
    2 | 5 | 3 | 8
    <strong>5 | 2 | 3 | 8</strong>
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>We can check our coverage again:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilJacocoReport2.png" alt="MathUtilSpec coverage report"></span></p>
</div>
<div class="paragraph">
<p>That is a little better. We now have 100% line coverage but not 100% branch coverage.
Let&#8217;s add one more testcase:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">def "sum of two biggest numbers"(int a, int b, int c, int d) {
    expect:
    MathUtil.sumBiggestPair(a, b, c) == d

    where:
    a | b | c | d
    2 | 5 | 3 | 8
    5 | 2 | 3 | 8
    <strong>5 | 4 | 1 | 9</strong>
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>And now we can see that we have reached 100% line coverage and 100% branch coverage:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilJacocoReport3.png" alt="MathUtilSpec coverage report"></span></p>
</div>
<div class="paragraph">
<p>At this point, we might be very confident in our code and ready to ship it to production.
Before we do, we&#8217;ll add one more testcase:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">def "sum of two biggest numbers"(int a, int b, int c, int d) {
    expect:
    MathUtil.sumBiggestPair(a, b, c) == d

    where:
    a | b | c | d
    2 | 5 | 3 | 8
    5 | 2 | 3 | 8
    5 | 4 | 1 | 9
    <strong>3 | 2 | 6 | 9</strong>
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>When we re-run our tests, we discover that the last testcase failed!:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilSpecResult2.png" alt="MathUtilSpec test result"></span></p>
</div>
<div class="paragraph">
<p>And examining the testcase, we can indeed see that there is a flaw in our algorithm.
Basically, having the <code>else</code> logic doesn&#8217;t cater for when <code>c</code> is
greater than both <code>a</code> and <code>b</code>!</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/MathUtilSpecResultFailedAssertion.png" alt="MathUtilSpec failed assertion"></span></p>
</div>
<div class="paragraph">
<p>We succumbed to faulty expectations of what 100% coverage would give us.</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/ImperfectPuzzle.jpg" alt="Imperfect puzzle" width="250"></span></p>
</div>
<div class="paragraph">
<p>The good news is that we can fix this. Here is an updated algorithm:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="java">public static int sumBiggestPair(int a, int b, int c) {                // Java
    int op1 = a;
    int op2 = b;
    if (c &gt; Math.min(a, b)) {
        op1 = c;
        op2 = Math.max(a, b);
    }
    return op1 + op2;
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>With this new algorithm, all 4 testcases now pass,
and we again have 100% line and branch coverage.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>> Task :SumBiggestPairPitest:test
<strong class="lime">✔</strong> Test sum of two biggest numbers [Tests: 4/<strong class="lime">4</strong>/<strong class="red">0</strong>/<strong class="gold">0</strong>] [Time: 0.317 s]
<strong class="lime">✔</strong> Test util.MathUtilSpec [Tests: 4/<strong class="lime">4</strong>/<strong class="red">0</strong>/<strong class="gold">0</strong>] [Time: 0.320 s]
<strong class="lime">✔</strong> Test Gradle Test Run :SumBiggestPairPitest:test [Tests: 4/<strong class="lime">4</strong>/<strong class="red">0</strong>/<strong class="gold">0</strong>]</pre>
</div>
</div>
<div class="paragraph">
<p>But haven&#8217;t we been here before? How can we be sure there isn&#8217;t some additional test
cases that might reveal another flaw in our algorithm? We could keep writing lots more
testcases, but we&#8217;ll look at two other techniques that can help.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_mutation_testing_with_pitest">Mutation testing with Pitest</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An interesting but not widely used technique is mutation testing. It probably deserves
to be more widely used. It can test the quality of a testsuite but has the drawback of
sometimes being quite resource intensive. It modifies (mutates) production code and
re-runs your testsuite. If your test suite still passes with modified code, it possibly
indicates that your testsuite is lacking sufficient coverage. Earlier, we had an algorithm
with a flaw and our testsuite didn&#8217;t initially pick it up. You can think of mutation
testing as adding a deliberate flaw and seeing whether your testsuite is good enough
to detect that flaw.</p>
</div>
<div class="paragraph">
<p>If you&#8217;re a fan of test-driven development (TDD), it espouses a rule that not a single
line of production code should be added unless a failing test forces that line to be
added. A corollary is that if you change a single line of production code in any
meaningful way, that some test should fail.</p>
</div>
<div class="paragraph">
<p>So, let&#8217;s have a look at what mutation testing says about our initial flawed algorithm.
We&#8217;ll use Pitest (also known as PIT). We&#8217;ll go back to our initial algorithm and the point
where we erroneously thought we had 100% coverage. When we run Pitest, we get the
following result:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/PitestCoverageReport.png" alt="Pitest coverage report summary"></span></p>
</div>
<div class="paragraph">
<p>And looking at the code we see:</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/PitestMathUtilCoverage.png" alt="Pitest coverage report"></span></p>
</div>
<div class="paragraph">
<p>With output including some statistics:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>======================================================================
- Statistics
======================================================================
&gt;&gt; Line Coverage: 7/8 (88%)
&gt;&gt; Generated 6 mutations Killed 4 (67%)
&gt;&gt; Mutations with no coverage 0. Test strength 67%
&gt;&gt; Ran 26 tests (4.33 tests per mutation)</pre>
</div>
</div>
<div class="paragraph">
<p>What is this telling us? Pitest mutated our code in ways that you might expect to break
it but our testsuite passed (survived) in a couple of instances. That means one of two
things. Either, there are multiple valid implementations of our algorithm and Pitest
found one of those equivalent solutions, or our testsuite is lacking some key testcases.
In our case, we know that the testsuite was insufficient.</p>
</div>
<div class="paragraph">
<p>Let&#8217;s run it again but this time with all of our tests and the corrected algorithm.</p>
</div>
<div class="paragraph">
<p><span class="image"><img src="img/PitestCoverage2.png" alt="Pitest coverage report"></span></p>
</div>
<div class="paragraph">
<p>The output when running the test has also changed slightly:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>======================================================================
- Statistics
======================================================================
&gt;&gt; Line Coverage: 6/7 (86%)
&gt;&gt; Generated 4 mutations Killed 3 (75%)
&gt;&gt; Mutations with no coverage 0. Test strength 75%
&gt;&gt; Ran 25 tests (6.25 tests per mutation)</pre>
</div>
</div>
<div class="paragraph">
<p>Our warnings from Pitest have reduced but not gone completely away and our test strength
has gone up but is still not 100%. It does mean that we are in better shape than before.
But should we be concerned?</p>
</div>
<div class="paragraph">
<p>It turns out in this case, we don&#8217;t need to worry (too much). As an example, an equally
valid algorithm for our function under test would be to replace the conditional with
<code>c &gt;= Math.min(a, b)</code>. Note the greater-than-equals operator rather than just greater-than. For this algorithm, a different path would be taken for the case when <code>c</code> equals <code>a</code> or <code>b</code>, but the end result would be the same. So, that would be an inconsequential or equivalent mutation. In such a case, there may be no additional testcase that we can write to keep Pitest happy. We have to be aware of this possible outcome when using this technique.</p>
</div>
<div class="paragraph">
<p>Finally, let&#8217;s look at our build file that ran Spock, Jacoco and Pitest:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">plugins {
    id 'info.solidsoft.pitest' version '1.7.4'
}
apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.apache.groovy:groovy-test-junit5:4.0.3"
    testImplementation("org.spockframework:spock-core:2.2-M3-groovy-4.0") {
        transitive = false
    }
}

pitest {
    junit5PluginVersion = '1.0.0'
    pitestVersion = '1.9.2'
    timestampedReports = false
    targetClasses = ['util.*']
}

tasks.named('test') {
    useJUnitPlatform()
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>The astute reader might note some subtle hints which show that the latest Spock versions
run on top of the JUnit 5 platform.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_using_property_based_testing">Using Property-based Testing</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Property-based testing is another technology which probably deserves much more attention.
Here we&#8217;ll use <a href="https://jqwik.net/">jqwik</a> which runs on top of JUnit5,
but you might also like to consider
<a href="https://github.com/Bijnagte/spock-genesis">Genesis</a>
which provides random generators and especially targets Spock.</p>
</div>
<div class="paragraph">
<p>Earlier, we looked at writing <em>more</em> tests to make our coverage stronger. Property-based
testing can often lead to writing <em>less</em> tests. Instead, we generate many random tests
automatically and see whether certain properties hold.</p>
</div>
<div class="paragraph">
<p>Previously, we fed in the inputs and the expected output. For property-based testing,
the inputs are typically randomly-generated values, we don&#8217;t know the output.
So, instead of testing directly against some known output, we&#8217;ll just check various
properties of the answer.</p>
</div>
<div class="paragraph">
<p>As an example, here is a test we could use:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void "result should be bigger than any individual and smaller than sum of all"(
        @ForAll @IntRange(min = 0, max = 1000) Integer a,
        @ForAll @IntRange(min = 0, max = 1000) Integer b,
        @ForAll @IntRange(min = 0, max = 1000) Integer c) {
    def result = sumBiggestPair(a, b, c)
    assert [a, b, c].every { individual -&gt; result &gt;= individual }
    assert result &lt;= a + b + c
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>@ForAll</code> annotations indicate places where jqwik will insert random values.
The <code>@IntRange</code> annotation indicates that we want the random values to be contained
between 0 and 1000.</p>
</div>
<div class="paragraph">
<p>Here we are checking that (at least for small positive numbers) adding the two biggest
numbers should be greater than or equal to any individual number and should be less than
or equal to adding all three of the numbers. These are necessary but insufficient
properties to ensure our system works.</p>
</div>
<div class="paragraph">
<p>When we run this we see the following output in the logs:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>                              |--------------------jqwik--------------------
tries = 1000                  | # of calls to property
checks = 1000                 | # of not rejected calls
generation = RANDOMIZED       | parameters are randomly generated
after-failure = PREVIOUS_SEED | use the previous seed
when-fixed-seed = ALLOW       | fixing the random seed is allowed
edge-cases#mode = MIXIN       | edge cases are mixed in
edge-cases#total = 125        | # of all combined edge cases
edge-cases#tried = 117        | # of edge cases tried in current run
seed = -311315135281003183    | random seed to reproduce generated values</pre>
</div>
</div>
<div class="paragraph">
<p>So, we wrote 1 test and 1000 testcases were executed. The number of tests run is
configurable. We won&#8217;t go into the details here. This looks great at first glance.
It turns out however, that this particular property is not very discriminating in
terms of the bugs it can find. This test passes for both our original flawed algorithm
as well as the fixed one. Let&#8217;s try a different property:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void "sum of any pair should not be greater than result"(
        @ForAll @IntRange(min = 0, max = 1000) Integer a,
        @ForAll @IntRange(min = 0, max = 1000) Integer b,
        @ForAll @IntRange(min = 0, max = 1000) Integer c) {
    def result = sumBiggestPair(a, b, c)
    assert [a + b, b + c, c + a].every { sumOfPair -&gt; result &gt;= sumOfPair }
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>If we calculate the biggest pair, then surely it must be greater than or equal to any
arbitrary pair. Trying this on our flawed algorithm gives:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
    assert [a + b, b + c, c + a].every { sumOfPair -&gt; result &gt;= sumOfPair }
            | | |  | | |  | | |  |
            1 1 0  0 2 2  2 3 1  false
                              |--------------------jqwik--------------------
tries = 12                    | # of calls to property
checks = 12                   | # of not rejected calls
generation = RANDOMIZED       | parameters are randomly generated
after-failure = PREVIOUS_SEED | use the previous seed
when-fixed-seed = ALLOW       | fixing the random seed is allowed
edge-cases#mode = MIXIN       | edge cases are mixed in
edge-cases#total = 125        | # of all combined edge cases
edge-cases#tried = 2          | # of edge cases tried in current run
seed = 4830696361996686755    | random seed to reproduce generated values

Shrunk Sample (6 steps)
-----------------------
  arg0: 1
  arg1: 0
  arg2: 2

Original Sample
---------------
  arg0: 247
  arg1: 32
  arg2: 267

  Original Error
  --------------
  org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
    assert [a + b, b + c, c + a].every { sumOfPair -&gt; result &gt;= sumOfPair }
            | | |  | | |  | | |  |
            | | 32 32| 267| | |  false
            | 279    299  | | 247
            247           | 514
                          267</pre>
</div>
</div>
<div class="paragraph">
<p>Not only did it find a case which highlighted the flaw, but it shrunk it down to a very
simple example. On our fixed algorithm, the 1000 tests pass!</p>
</div>
<div class="paragraph">
<p>The previous property can be refactored a little to not only calculate all three pairs
but then find the maximum of those. This simplifies the condition somewhat:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void "result should be the same as alternative oracle implementation"(
        @ForAll @IntRange(min = 0, max = 1000) Integer a,
        @ForAll @IntRange(min = 0, max = 1000) Integer b,
        @ForAll @IntRange(min = 0, max = 1000) Integer c) {
    assert sumBiggestPair(a, b, c) == [a+b, a+c, b+c].max()
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>This approach, where an alternative implementation is used, is known as a test oracle.
The alternative implementation might be less efficient, so not ideal for production code,
but fine for testing. When revamping or replacing some software, the oracle might be the
existing system. When run on our fixed algorithm, we again have 1000 testcases passing.</p>
</div>
<div class="paragraph">
<p>Let&#8217;s go one step further and remove our <code>@IntRange</code> boundaries on the Integers:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void "result should be the same as alternative oracle implementation"(@ForAll Integer a, @ForAll Integer b, @ForAll Integer c) {
    assert sumBiggestPair(a, b, c) == [a+b, a+c, b+c].max()
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>When we run the test now, we might be surprised:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>  org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
    assert sumBiggestPair(a, b, c) == [a+b, a+c, b+c].max()
           |              |  |  |  |   |||  |||  |||  |
           -2147483648    0  1  |  |   0|1  0||  1||  2147483647
                                |  |    1    ||   |2147483647
                                |  false     ||   -2147483648
                                2147483647   |2147483647
                                             2147483647
Shrunk Sample (13 steps)
------------------------
  arg0: 0
  arg1: 1
  arg2: 2147483647</pre>
</div>
</div>
<div class="paragraph">
<p>It fails! Is this another bug in our algorithm? Possibly? But it could equally be
a bug in our property test. Further investigation is warranted.</p>
</div>
<div class="paragraph">
<p>It turns out that our algorithm suffers from Integer overflow when trying to add <code>1</code> to
<code>Integer.MAX_VALUE</code>. Our test partially suffers from the same problem but when we call
<code>max()</code>, the negative value will be discarded. There is no always correct answer as to
what should happen in this scenario. We go back to the customer and check the real
requirement. In this case, let&#8217;s assume the customer was happy for the overflow to
occur - since that is what would happen if performing the operation long-hand in Java.
With that knowledge we should fix our test to at least pass correctly when overflow occurs.</p>
</div>
<div class="paragraph">
<p>We have a number of options to fix this. We already saw previously we can use <code>@IntRange</code>.
This is one way to "avoid" the problem and we have a few similar approaches which do the
same. We could use a more confined data type, e.g. <code>Short</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void checkShort(@ForAll Short a, @ForAll Short b, @ForAll Short c) {
    assert sumBiggestPair(a, b, c) == [a+b, a+c, b+c].max()
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Or we could use a customised provider method:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void checkIntegerConstrainedProvider(@ForAll('halfMax') Integer a,
                                     @ForAll('halfMax') Integer b,
                                     @ForAll('halfMax') Integer c) {
    assert sumBiggestPair(a, b, c) == [a+b, a+c, b+c].max()
}

@Provide
Arbitrary&lt;Integer&gt; halfMax() {
    int halfMax = Integer.MAX_VALUE &gt;&gt; 1
    return Arbitraries.integers().between(-halfMax, halfMax)
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>But rather than avoiding the problem, we could change our test so that it allowed for
the possibility of overflow within <code>sumBiggestPair</code> but didn&#8217;t compound the problem with
its own overflow. E.g.&nbsp;we could use Long&#8217;s to do our calculations within our test:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">@Property
void checkIntegerWithLongCalculations(@ForAll Integer a, @ForAll Integer b, @ForAll Integer c) {
    def (al, bl, cl) = [a, b, c]*.toLong()
    assert sumBiggestPair(a, b, c) == [al+bl, al+cl, bl+cl].max().toInteger()
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Finally, let&#8217;s again look at our Gradle build file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code data-lang="groovy">apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation project(':SumBiggestPair')
    testImplementation "org.apache.groovy:groovy-test-junit5:4.0.3"
    testImplementation "net.jqwik:jqwik:1.6.5"
}

test {
    useJUnitPlatform {
        includeEngines 'jqwik'
    }
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_more_information">More information</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The examples in this blog post are excerpts from the following repo:<br>
<a href="https://github.com/paulk-asert/property-based-testing" class="bare">https://github.com/paulk-asert/property-based-testing</a></p>
</div>
<div class="paragraph">
<p>Library versions used:<br>
Gradle 7.5, Groovy 4.0.3, jqwik 1.6.5, pitest 1.9.2, Spock 2.2-M3-groovy-4.0, Jacoco 0.8.8.<br>
Tested with JDK 8, 11, 17, 18.</p>
</div>
<div class="paragraph">
<p>There are many sites with valuable information about the technologies covered here. There are also some great books. Books on Spock include <a href="https://www.oreilly.com/library/view/spock-up-and/9781491923283/">Spock: Up and Running</a>, <a href="https://www.manning.com/books/java-testing-with-spock">Java Testing with Spock</a>, and
<a href="https://leanpub.com/spockframeworknotebook">Spocklight Notebook</a>.
Books on Groovy include:
<a href="https://www.manning.com/books/groovy-in-action-second-edition">Groovy in Action</a>
and <a href="https://link.springer.com/book/10.1007/978-1-4842-5058-7">Learning Groovy 3</a>.
If you want general information about using Java and Groovy together, consider
<a href="https://www.manning.com/books/making-java-groovy">Making Java Groovy</a>.
And there&#8217;s a section on mutation testing in <a href="http://kaczanowscy.pl/books/practical_unit_testing_junit_testng_mockito.html">Practical Unit Testing With Testng And Mockito</a>. The most recent book for property testing is for the <a href="https://pragprog.com/titles/fhproper/property-based-testing-with-proper-erlang-and-elixir/">Erlang and Elixir languages</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_conclusion">Conclusion</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We have looked at testing Java code using Groovy and Spock with some additional
tools like Jacoco, jqwik and Pitest. Generally using Groovy to test Java is a
straight-forward experience. Groovy also lends itself to writing testing DSLs
which allow non-hard-core programmers to write very simple looking tests;
but that&#8217;s a topic for another blog!</p>
</div>
</div>
</div></div></div></div></div><footer id='footer'>
                            <div class='row'>
                                <div class='colset-3-footer'>
                                    <div class='col-1'>
                                        <h1>Groovy</h1><ul>
                                            <li><a href='https://groovy-lang.org/learn.html'>Learn</a></li><li><a href='https://groovy-lang.org/documentation.html'>Documentation</a></li><li><a href='/download.html'>Download</a></li><li><a href='https://groovy-lang.org/support.html'>Support</a></li><li><a href='/'>Contribute</a></li><li><a href='https://groovy-lang.org/ecosystem.html'>Ecosystem</a></li><li><a href='/blog'>Blog posts</a></li><li><a href='https://groovy.apache.org/events.html'></a></li>
                                        </ul>
                                    </div><div class='col-2'>
                                        <h1>About</h1><ul>
                                            <li><a href='https://github.com/apache/groovy'>Source code</a></li><li><a href='https://groovy-lang.org/security.html'>Security</a></li><li><a href='https://groovy-lang.org/learn.html#books'>Books</a></li><li><a href='https://groovy-lang.org/thanks.html'>Thanks</a></li><li><a href='http://www.apache.org/foundation/sponsorship.html'>Sponsorship</a></li><li><a href='https://groovy-lang.org/faq.html'>FAQ</a></li><li><a href='https://groovy-lang.org/search.html'>Search</a></li>
                                        </ul>
                                    </div><div class='col-3'>
                                        <h1>Socialize</h1><ul>
                                            <li><a href='https://groovy-lang.org/mailing-lists.html'>Discuss on the mailing-list</a></li><li><a href='https://twitter.com/ApacheGroovy'>Groovy on Twitter</a></li><li><a href='https://groovy-lang.org/events.html'>Events and conferences</a></li><li><a href='https://github.com/apache/groovy'>Source code on GitHub</a></li><li><a href='https://groovy-lang.org/reporting-issues.html'>Report issues in Jira</a></li><li><a href='http://stackoverflow.com/questions/tagged/groovy'>Stack Overflow questions</a></li><li><a href='http://groovycommunity.com/'>Slack Community</a></li>
                                        </ul>
                                    </div><div class='col-right'>
                                        <p>
                                            The Groovy programming language is supported by the <a href='http://www.apache.org'>Apache Software Foundation</a> and the Groovy community.
                                        </p><div text-align='right'>
                                            <img src='../img/asf_logo.png' title='The Apache Software Foundation' alt='The Apache Software Foundation' style='width:60%'/>
                                        </div><p>Apache&reg; and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.</p>
                                    </div>
                                </div><div class='clearfix'>&copy; 2003-2023 the Apache Groovy project &mdash; Groovy is Open Source: <a href='http://www.apache.org/licenses/LICENSE-2.0.html' alt='Apache 2 License'>license</a>, <a href='https://privacy.apache.org/policies/privacy-policy-public.html'>privacy policy</a>.</div>
                            </div>
                        </footer></div>
                </div>
            </div>
        </div>
    </div><script src='../js/vendor/jquery-1.10.2.min.js' defer></script><script src='../js/vendor/classie.js' defer></script><script src='../js/vendor/bootstrap.js' defer></script><script src='../js/vendor/sidebarEffects.js' defer></script><script src='../js/vendor/modernizr-2.6.2.min.js' defer></script><script src='../js/plugins.js' defer></script><script src='https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.js'></script><script>document.addEventListener('DOMContentLoaded',prettyPrint)</script><script>
          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

          ga('create', 'UA-257558-10', 'auto');
          ga('send', 'pageview');
    </script>
</body></html>