<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Roland's Blog</title><link>https://blog.rweisleder.de/</link><description>Interesting things about the Java ecosystem</description><atom:link href="https://blog.rweisleder.de/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:roland@rweisleder.de"&gt;Roland Weisleder&lt;/a&gt; </copyright><lastBuildDate>Wed, 04 Mar 2026 14:59:28 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Java Regex: Dynamic Replacements with Lambda Expressions</title><link>https://blog.rweisleder.de/posts/java-regex-dynamic-replacement/</link><dc:creator>Roland Weisleder</dc:creator><description>&lt;div&gt;&lt;p&gt;Regular expressions are a powerful tool to find patterns in strings.
Static replacements are also relatively easy to implement.
When it comes to dynamic replacements, things get more interesting.&lt;/p&gt;
&lt;section id="static-replacements"&gt;
&lt;h2&gt;Static replacements&lt;/h2&gt;
&lt;p&gt;Suppose we want to convert all ISO dates in a string into the European format DD.MM.YYYY for our users.&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_889eddb23d33462d878a2ec46101ab95-1" name="rest_code_889eddb23d33462d878a2ec46101ab95-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Lorem ipsum 2023-11-07 dolor sit 2021-09-14 amet."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_889eddb23d33462d878a2ec46101ab95-2" name="rest_code_889eddb23d33462d878a2ec46101ab95-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;Pattern&lt;/span&gt; &lt;span class="n"&gt;isoDatePattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"(\\d{4})-(\\d{2})-(\\d{2})"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_889eddb23d33462d878a2ec46101ab95-3" name="rest_code_889eddb23d33462d878a2ec46101ab95-3"&gt;&lt;/a&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;isoDatePattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;replaceAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"$3.$2.$1"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_889eddb23d33462d878a2ec46101ab95-4" name="rest_code_889eddb23d33462d878a2ec46101ab95-4"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// "Lorem ipsum 07.11.2023 dolor sit 14.09.2021 amet."&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;For a static replacement, we can access each group of a match using the dollar notation.&lt;/p&gt;
&lt;p&gt;But suppose we now want to show our users the dates in a long form, depending on their locale.
The result should look something like this:&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-1" name="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;Locale&lt;/span&gt; &lt;span class="n"&gt;locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Locale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;US&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-2" name="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Lorem ipsum 2023-11-07 dolor sit 2021-09-14 amet."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-3" name="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-3"&gt;&lt;/a&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;a id="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-4" name="rest_code_6a9dfcfe14e04396afd093ed096a3c0b-4"&gt;&lt;/a&gt;&lt;span class="c1"&gt;// "Lorem ipsum November 7, 2023 dolor sit September 14, 2021 amet."&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;In this case, we cannot simply transform the groups.
Instead, we have to dynamically execute additional code for each match.
Depending on the Java version we are using, we have various options.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.rweisleder.de/posts/java-regex-dynamic-replacement/"&gt;Read more…&lt;/a&gt; (3 min remaining to read)&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;</description><category>java</category><category>regex</category><guid>https://blog.rweisleder.de/posts/java-regex-dynamic-replacement/</guid><pubDate>Thu, 03 Jul 2025 14:15:00 GMT</pubDate></item><item><title>One Step Towards Maintainable Regular Expressions In Java</title><link>https://blog.rweisleder.de/posts/java-regex-named-groups/</link><dc:creator>Roland Weisleder</dc:creator><description>&lt;div&gt;&lt;p&gt;Regular expressions are a great way to extract data from strings.
In Java, we typically use &lt;code class="docutils literal"&gt;Pattern&lt;/code&gt; and &lt;code class="docutils literal"&gt;Matcher&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-1" name="rest_code_ea86e8bfa979480c99d3801f473d2067-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;parseDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-2" name="rest_code_ea86e8bfa979480c99d3801f473d2067-2"&gt;&lt;/a&gt;    &lt;span class="n"&gt;Pattern&lt;/span&gt; &lt;span class="n"&gt;datePattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Pattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"(\\d{4})-(\\d{2})-(\\d{2})"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-3" name="rest_code_ea86e8bfa979480c99d3801f473d2067-3"&gt;&lt;/a&gt;    &lt;span class="n"&gt;Matcher&lt;/span&gt; &lt;span class="n"&gt;dateMatcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datePattern&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-4" name="rest_code_ea86e8bfa979480c99d3801f473d2067-4"&gt;&lt;/a&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;dateMatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-5" name="rest_code_ea86e8bfa979480c99d3801f473d2067-5"&gt;&lt;/a&gt;        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IllegalArgumentException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Invalid date format"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-6" name="rest_code_ea86e8bfa979480c99d3801f473d2067-6"&gt;&lt;/a&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-7" name="rest_code_ea86e8bfa979480c99d3801f473d2067-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-8" name="rest_code_ea86e8bfa979480c99d3801f473d2067-8"&gt;&lt;/a&gt;    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dateMatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-9" name="rest_code_ea86e8bfa979480c99d3801f473d2067-9"&gt;&lt;/a&gt;    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dateMatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-10" name="rest_code_ea86e8bfa979480c99d3801f473d2067-10"&gt;&lt;/a&gt;    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dateMatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-11" name="rest_code_ea86e8bfa979480c99d3801f473d2067-11"&gt;&lt;/a&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-12" name="rest_code_ea86e8bfa979480c99d3801f473d2067-12"&gt;&lt;/a&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Year: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;", Month: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;month&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;", Day: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a id="rest_code_ea86e8bfa979480c99d3801f473d2067-13" name="rest_code_ea86e8bfa979480c99d3801f473d2067-13"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;This works, but it´s not great.&lt;/p&gt;
&lt;p&gt;There are a few things I don´t like about regular expressions and this example in particular:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;The regex itself is already quite cryptic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Group access via numbers is hard to follow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any change to the regex might require me to recount and update group indices.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Honestly, I don’t want to count parentheses every time I tweak something.
It´s error-prone!&lt;/p&gt;
&lt;p&gt;The good news is, there is a better alternative since Java 7.
Surprisingly, it´s still rarely used.
And no, it´s not extracting magic numbers into &lt;code class="docutils literal"&gt;public static final int THREE = 3;&lt;/code&gt; to keep Sonar happy.
(If you’re still on Java 6 or below: let’s talk.)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.rweisleder.de/posts/java-regex-named-groups/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>java</category><category>regex</category><guid>https://blog.rweisleder.de/posts/java-regex-named-groups/</guid><pubDate>Tue, 13 May 2025 18:00:00 GMT</pubDate></item><item><title>The Flag Parameter Anti-Pattern</title><link>https://blog.rweisleder.de/posts/flag-parameter-anti-pattern/</link><dc:creator>Roland Weisleder</dc:creator><description>&lt;div&gt;&lt;p&gt;While implementing a new feature, I came across the &lt;em&gt;flag parameter&lt;/em&gt; anti-pattern in two unrelated places.
I would like to take this as an opportunity to take a closer look at this anti-pattern.&lt;/p&gt;
&lt;section id="a-simple-example"&gt;
&lt;h2&gt;A simple example&lt;/h2&gt;
&lt;p&gt;Lets assume we want to load all PDF documents via an API method.
This could look like this:&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_ec003c9c681a428e8097fd09913bb420-1" name="rest_code_ec003c9c681a428e8097fd09913bb420-1"&gt;&lt;/a&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;DocumentService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_ec003c9c681a428e8097fd09913bb420-2" name="rest_code_ec003c9c681a428e8097fd09913bb420-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_ec003c9c681a428e8097fd09913bb420-3" name="rest_code_ec003c9c681a428e8097fd09913bb420-3"&gt;&lt;/a&gt;    &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="nf"&gt;loadDocuments&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;a id="rest_code_ec003c9c681a428e8097fd09913bb420-4" name="rest_code_ec003c9c681a428e8097fd09913bb420-4"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;a href="https://blog.rweisleder.de/posts/flag-parameter-anti-pattern/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;</description><category>java</category><guid>https://blog.rweisleder.de/posts/flag-parameter-anti-pattern/</guid><pubDate>Thu, 03 Nov 2022 11:00:00 GMT</pubDate></item><item><title>Why Unit Tests Will Save You a Lot of Time</title><link>https://blog.rweisleder.de/posts/unit-tests-will-save-you-time/</link><dc:creator>Roland Weisleder</dc:creator><description>&lt;div&gt;&lt;p&gt;When you as a developer hear that you should write unit tests, it sounds like more effort at first.
The code you have written works, as you have already seen by trying it.&lt;/p&gt;
&lt;p&gt;However, the world around it is constantly changing.
And how can you be sure that the code still works despite changes from the outside?&lt;/p&gt;
&lt;section id="date-format"&gt;
&lt;h2&gt;Date Format?&lt;/h2&gt;
&lt;p&gt;Let's assume that in our program there is a function to parse strings as dates.&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-1" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-1"&gt;&lt;/a&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-2" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-2"&gt;&lt;/a&gt;&lt;span class="cm"&gt; * @param input a date with format "dd.MM.yy HH:mm"&lt;/span&gt;
&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-3" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-3"&gt;&lt;/a&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-4" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-4"&gt;&lt;/a&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="n"&gt;Date&lt;/span&gt; &lt;span class="nf"&gt;parseDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="n"&gt;ParseException&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-5" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-5"&gt;&lt;/a&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;DateFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-6" name="rest_code_19bae3b3b09e473e9ea3755e3ca8f23d-6"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;We use a class from the JDK here and even describe in the Javadoc which format the &lt;code class="docutils literal"&gt;input&lt;/code&gt; parameter should have.
Once we have tried this, what else can go wrong?
Surely this will work forever.&lt;/p&gt;
&lt;p&gt;Even after updating from Java 8 to Java 11, everyone would assume that the function still works as described, right?
After all, we are only using a class from the JDK.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.rweisleder.de/posts/unit-tests-will-save-you-time/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;</description><category>java</category><category>junit</category><guid>https://blog.rweisleder.de/posts/unit-tests-will-save-you-time/</guid><pubDate>Wed, 07 Sep 2022 07:40:00 GMT</pubDate></item><item><title>Maven Doesn't Execute All JUnit Tests by Default</title><link>https://blog.rweisleder.de/posts/maven-doesnt-execute-all-junit-tests-by-default/</link><dc:creator>Roland Weisleder</dc:creator><description>&lt;div&gt;&lt;p&gt;We as developers write many unit tests.
The CI pipeline will run all tests with every build.
We trust that, if the status is green, everything should be okay.&lt;/p&gt;
&lt;p&gt;But what if the unit tests should have failed?
I recently learned that Maven does not execute all tests by default.&lt;/p&gt;
&lt;p&gt;Consider this simple class:&lt;/p&gt;
&lt;pre class="code java"&gt;&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-1" name="rest_code_68192f78f8c345f79fecf700e516848f-1"&gt;&lt;/a&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyTests&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-2" name="rest_code_68192f78f8c345f79fecf700e516848f-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-3" name="rest_code_68192f78f8c345f79fecf700e516848f-3"&gt;&lt;/a&gt;    &lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-4" name="rest_code_68192f78f8c345f79fecf700e516848f-4"&gt;&lt;/a&gt;    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;firstTest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-5" name="rest_code_68192f78f8c345f79fecf700e516848f-5"&gt;&lt;/a&gt;        &lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-6" name="rest_code_68192f78f8c345f79fecf700e516848f-6"&gt;&lt;/a&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-7" name="rest_code_68192f78f8c345f79fecf700e516848f-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-8" name="rest_code_68192f78f8c345f79fecf700e516848f-8"&gt;&lt;/a&gt;    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NestedTests&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-9" name="rest_code_68192f78f8c345f79fecf700e516848f-9"&gt;&lt;/a&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-10" name="rest_code_68192f78f8c345f79fecf700e516848f-10"&gt;&lt;/a&gt;        &lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-11" name="rest_code_68192f78f8c345f79fecf700e516848f-11"&gt;&lt;/a&gt;        &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;secondTest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-12" name="rest_code_68192f78f8c345f79fecf700e516848f-12"&gt;&lt;/a&gt;            &lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-13" name="rest_code_68192f78f8c345f79fecf700e516848f-13"&gt;&lt;/a&gt;        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-14" name="rest_code_68192f78f8c345f79fecf700e516848f-14"&gt;&lt;/a&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_68192f78f8c345f79fecf700e516848f-15" name="rest_code_68192f78f8c345f79fecf700e516848f-15"&gt;&lt;/a&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;We see that &lt;code class="docutils literal"&gt;firstTest&lt;/code&gt; should succeed and &lt;code class="docutils literal"&gt;secondTest&lt;/code&gt; should fail.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.rweisleder.de/posts/maven-doesnt-execute-all-junit-tests-by-default/"&gt;Read more…&lt;/a&gt; (2 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>java</category><category>junit</category><category>maven</category><guid>https://blog.rweisleder.de/posts/maven-doesnt-execute-all-junit-tests-by-default/</guid><pubDate>Thu, 13 Sep 2018 18:16:00 GMT</pubDate></item></channel></rss>