You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2023/08/09 16:18:05 UTC

[uima-ruta] branch refactoring/133-Update-dependencies updated: Issue #133: Update dependencies

This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch refactoring/133-Update-dependencies
in repository https://gitbox.apache.org/repos/asf/uima-ruta.git


The following commit(s) were added to refs/heads/refactoring/133-Update-dependencies by this push:
     new cd3e357e Issue #133: Update dependencies
cd3e357e is described below

commit cd3e357eef0844ead5e045b5fdbedf7fa7c7ccc5
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Wed Aug 9 17:17:07 2023 +0200

    Issue #133: Update dependencies
    
    - Upgrade to JUnit 5 and AssertJ
---
 .../ruta-ep-example-extensions/pom.xml             |  27 ++-
 .../ruta/example/extensions/ExampleActionTest.java |   7 +-
 .../ruta/example/extensions/ExampleBlockTest.java  |  14 +-
 .../example/extensions/ExampleConditionTest.java   |  18 +-
 .../extensions/ExampleNumberFunctionTest.java      |  10 +-
 .../extensions/ExampleStringFunctionTest.java      |  17 +-
 .../extensions/ExampleTypeFunctionTest.java        |  14 +-
 example-projects/ruta-maven-example/pom.xml        |  13 +-
 .../org/apache/uima/ruta/example/ExampleTest.java  |  48 ++---
 installEclipseSettings.sh                          |   3 +
 ruta-core-ext/pom.xml                              |  11 +-
 .../org/apache/uima/ruta/block/fst/SimpleTest.java |  25 +--
 .../org/apache/uima/ruta/block/fst/TimeTest.java   |   3 +-
 .../FirstCharToUpperCaseStringFunctionTest.java    |  33 +---
 .../ruta/string/ReplaceAllStringFunctionTest.java  |  31 +--
 .../string/ReplaceFirstStringFunctionTest.java     |  34 +---
 .../ruta/string/SubstringStringFunctionTest.java   |  27 +--
 .../ruta/string/ToLowerCaseStringFunctionTest.java |  32 +--
 .../ruta/string/ToUpperCaseStringFunctionTest.java |  32 +--
 .../uima/ruta/string/bool/VerbalizerTest.java      |   7 +-
 ruta-core/pom.xml                                  |  47 ++---
 .../uima/ruta/AdditionalScriptUimaFitTest.java     |  86 ++++----
 .../org/apache/uima/ruta/AlternativeMatchTest.java |   2 +-
 .../apache/uima/ruta/CommentBeforePackageTest.java |   3 +-
 .../org/apache/uima/ruta/ConflictingTypeTest.java  |  15 +-
 .../uima/ruta/ConjunctiveRuleElementTest.java      |   2 +-
 .../java/org/apache/uima/ruta/CoveredTextTest.java |   3 +-
 .../java/org/apache/uima/ruta/CustomViewTest.java  |  17 +-
 .../uima/ruta/DisjunctiveRuleElementTest.java      |   3 +-
 .../org/apache/uima/ruta/EmptyDocumentTest.java    |  15 +-
 .../org/apache/uima/ruta/EqualShortNameTest.java   |   2 +-
 .../apache/uima/ruta/ExternalWordResourceTest.java |   7 +-
 .../org/apache/uima/ruta/FeatureMatch1Test.java    |   2 +-
 .../org/apache/uima/ruta/FeatureMatch2Test.java    |   2 +-
 .../java/org/apache/uima/ruta/FilteringTest.java   |   2 +-
 .../org/apache/uima/ruta/GreedyAnchoringTest.java  |   3 +-
 .../uima/ruta/GreedyComposedWithConditionTest.java |   3 +-
 .../org/apache/uima/ruta/ImportStatementsTest.java |  56 +++---
 .../uima/ruta/IncompletePartitioningTest.java      |   2 +-
 .../uima/ruta/IncrementalPartitioningTest.java     |   3 +-
 .../org/apache/uima/ruta/IndexSkipTypesTest.java   |   3 +-
 .../uima/ruta/LoadResourceFromClassPathTest.java   |  47 ++---
 .../uima/ruta/LoadScriptFromClassPathTest.java     |   2 +-
 .../java/org/apache/uima/ruta/LongGreedy1Test.java |   6 +-
 .../java/org/apache/uima/ruta/LongGreedy2Test.java |   6 +-
 .../org/apache/uima/ruta/NewCASPipelineTest.java   |  14 +-
 .../java/org/apache/uima/ruta/OutOfWindowTest.java |   2 +-
 .../org/apache/uima/ruta/ReindexSkipTypesTest.java |   3 +-
 .../apache/uima/ruta/ReindexUpdateModeTest.java    |   7 +-
 .../uima/ruta/RemoveDocumentAnnotationTest.java    |   3 +-
 .../org/apache/uima/ruta/RutaBasicUtilsTest.java   |  86 ++++----
 .../org/apache/uima/ruta/RutaParsingErrorTest.java |   9 +-
 .../org/apache/uima/ruta/StrictImportTest.java     |  22 +--
 .../java/org/apache/uima/ruta/SubAtomicTest.java   |   2 +-
 .../java/org/apache/uima/ruta/TypeAliasTest.java   |  33 ++--
 .../apache/uima/ruta/TypeIgnorePatternTest.java    |   3 +-
 .../org/apache/uima/ruta/WSDictionaryTest.java     |  67 +++----
 .../apache/uima/ruta/ZeroLengthAnnotationTest.java |   3 +-
 .../apache/uima/ruta/action/AddFilterTypeTest.java |   2 +-
 .../apache/uima/ruta/action/AddRetainTypeTest.java |   2 +-
 .../java/org/apache/uima/ruta/action/AddTest.java  |   3 +-
 .../apache/uima/ruta/action/AssignActionTest.java  |   2 +-
 .../org/apache/uima/ruta/action/ClearTest.java     |   2 +-
 .../org/apache/uima/ruta/action/ConfigureTest.java |  11 +-
 .../org/apache/uima/ruta/action/CreateTest.java    |  19 +-
 .../java/org/apache/uima/ruta/action/FillTest.java |   8 +-
 .../apache/uima/ruta/action/FilterTypeTest.java    |   2 +-
 .../org/apache/uima/ruta/action/GatherTest.java    |  16 +-
 .../apache/uima/ruta/action/GetFeatureTest.java    |   2 +-
 .../org/apache/uima/ruta/action/GetListTest.java   |   2 +-
 .../java/org/apache/uima/ruta/action/GetTest.java  |   2 +-
 .../uima/ruta/action/ImplicitActionTest.java       |   2 +-
 .../apache/uima/ruta/action/LabelAtActionTest.java |   2 +-
 .../apache/uima/ruta/action/MacroActionTest.java   |  30 +--
 .../uima/ruta/action/MarkFastReloadTest.java       |   3 +-
 .../org/apache/uima/ruta/action/MarkFastTest.java  |   2 +-
 .../action/MarkFastWithFeatureProjectionTest.java  |  26 +--
 .../uima/ruta/action/MarkFirstActionTest.java      |   2 +-
 .../org/apache/uima/ruta/action/MarkLastTest.java  |   2 +-
 .../org/apache/uima/ruta/action/MarkOnceTest.java  |   2 +-
 .../org/apache/uima/ruta/action/MarkScoreTest.java |   2 +-
 .../uima/ruta/action/MarkTableReloadTest.java      |  30 +--
 .../org/apache/uima/ruta/action/MarkTableTest.java |  30 +--
 .../java/org/apache/uima/ruta/action/MarkTest.java |   2 +-
 .../apache/uima/ruta/action/MatchedTextTest.java   |   2 +-
 .../org/apache/uima/ruta/action/MergeTest.java     |   2 +-
 .../uima/ruta/action/RemoveDuplicateTest.java      |   2 +-
 .../uima/ruta/action/RemoveFilterTypeTest.java     |   2 +-
 .../uima/ruta/action/RemoveRetainTypeTest.java     |   2 +-
 .../org/apache/uima/ruta/action/RemoveTest.java    |   2 +-
 .../org/apache/uima/ruta/action/ReplaceTest.java   |   6 +-
 .../apache/uima/ruta/action/RetainTypeTest.java    |   2 +-
 .../apache/uima/ruta/action/SetFeatureTest.java    |  14 +-
 .../org/apache/uima/ruta/action/Shift1Test.java    |   2 +-
 .../org/apache/uima/ruta/action/Shift2Test.java    |  12 +-
 .../ruta/action/ShiftWithLowMemoryProfileTest.java |   8 +-
 .../org/apache/uima/ruta/action/SplitTest.java     | 113 ++++++-----
 .../org/apache/uima/ruta/action/Transfer2Test.java |  22 +--
 .../org/apache/uima/ruta/action/TransferTest.java  |   8 +-
 .../java/org/apache/uima/ruta/action/TrieTest.java |  56 +++---
 .../java/org/apache/uima/ruta/action/TrimTest.java |   2 +-
 .../org/apache/uima/ruta/action/UnmarkAllTest.java |   2 +-
 .../org/apache/uima/ruta/action/UnmarkTest.java    |   2 +-
 .../apache/uima/ruta/block/DocumentBlockTest.java  |   3 +-
 .../apache/uima/ruta/block/ForEachBlockTest.java   |   7 +-
 .../apache/uima/ruta/block/OnlyFirstBlockTest.java |  10 +-
 .../apache/uima/ruta/block/OnlyOnceBlockTest.java  |  36 ++--
 .../uima/ruta/block/RutaScriptBlockTest.java       |   2 +-
 .../uima/ruta/cache/RutaPatternCacheTest.java      |  16 +-
 .../org/apache/uima/ruta/condition/AfterTest.java  |   2 +-
 .../org/apache/uima/ruta/condition/AndTest.java    |   2 +-
 .../org/apache/uima/ruta/condition/BeforeTest.java |   2 +-
 .../apache/uima/ruta/condition/ContainsTest.java   |   2 +-
 .../uima/ruta/condition/ContextCountTest.java      |  19 +-
 .../org/apache/uima/ruta/condition/CountTest.java  |   2 +-
 .../uima/ruta/condition/CurrentCountTest.java      |   2 +-
 .../apache/uima/ruta/condition/EndsWithTest.java   |   2 +-
 .../apache/uima/ruta/condition/FeatureTest.java    |   2 +-
 .../org/apache/uima/ruta/condition/IfTest.java     |   2 +-
 .../ruta/condition/ImplicitCondition1Test.java     |   2 +-
 .../ruta/condition/ImplicitCondition2Test.java     |  11 +-
 .../org/apache/uima/ruta/condition/InListTest.java |   2 +-
 .../org/apache/uima/ruta/condition/IsTest.java     |   2 +-
 .../org/apache/uima/ruta/condition/LastTest.java   |   2 +-
 .../org/apache/uima/ruta/condition/MOfNTest.java   |   2 +-
 .../uima/ruta/condition/MacroConditionTest.java    |   3 +-
 .../org/apache/uima/ruta/condition/NearTest.java   |   2 +-
 .../org/apache/uima/ruta/condition/NotTest.java    |   2 +-
 .../org/apache/uima/ruta/condition/OrTest.java     |   2 +-
 .../org/apache/uima/ruta/condition/ParseTest.java  |   2 +-
 .../apache/uima/ruta/condition/PartOfNEQ2Test.java |  14 +-
 .../apache/uima/ruta/condition/PartOfNEQTest.java  |   2 +-
 .../org/apache/uima/ruta/condition/PartOfTest.java |   2 +-
 .../apache/uima/ruta/condition/PositionTest.java   |   2 +-
 .../org/apache/uima/ruta/condition/RegExpTest.java |   2 +-
 .../org/apache/uima/ruta/condition/ScoreTest.java  |   2 +-
 .../org/apache/uima/ruta/condition/SizeTest.java   |   2 +-
 .../apache/uima/ruta/condition/StartsWithTest.java |   2 +-
 .../apache/uima/ruta/condition/TotalCountTest.java |   2 +-
 .../org/apache/uima/ruta/condition/VoteTest.java   |   2 +-
 .../ruta/descriptor/GenerateDescriptorTest.java    |  72 +++----
 .../uima/ruta/engine/CascadedModifierTest.java     |   8 +-
 .../uima/ruta/engine/DifferentSeederTest.java      |   3 +-
 .../uima/ruta/engine/HandleDataPathTest.java       |  23 +--
 .../apache/uima/ruta/engine/HtmlAnnotatorTest.java |  81 ++++----
 .../apache/uima/ruta/engine/HtmlConverterTest.java | 122 ++++++------
 .../uima/ruta/engine/HtmlConverterXmlTest.java     |  35 ++--
 .../uima/ruta/engine/MultipleSeedersTest.java      |  25 +--
 .../org/apache/uima/ruta/engine/NoSeedersTest.java |   3 +-
 .../org/apache/uima/ruta/engine/ParamVarTest.java  |  50 +++--
 .../uima/ruta/engine/PlainTextAnnotatorTest.java   |  20 +-
 .../uima/ruta/engine/RecursiveConfigureTest.java   |   6 +-
 .../ruta/engine/ResourcesFromDataPathTest.java     |   3 +-
 .../apache/uima/ruta/engine/RulesParamTest.java    |   2 +-
 .../apache/uima/ruta/engine/RutaCutterTest.java    |  26 +--
 .../apache/uima/ruta/engine/RutaEngineTest.java    |  84 ++++----
 .../apache/uima/ruta/engine/RutaModifierTest.java  |   6 +-
 .../java/org/apache/uima/ruta/engine/RutaTest.java |  59 +++---
 .../uima/ruta/engine/StackedScriptsTest.java       |   3 +-
 .../ThreeStackedScriptsVariableResetTest.java      |   8 +-
 .../uima/ruta/engine/UimaClassLoaderTest.java      |  34 ++--
 ...itAnalysisEngineWithManditoryParameterTest.java |   3 +-
 .../org/apache/uima/ruta/engine/UimafitTest.java   |  15 +-
 .../apache/uima/ruta/engine/ViewWriterTest.java    |  14 +-
 .../expression/AnnotationTypeExpressionTest.java   |   3 +-
 .../ConditionedAnnotationTypeExpressionTest.java   |   3 +-
 .../ruta/expression/IndexedListExpressionTest.java |   7 +-
 .../uima/ruta/expression/NullExpressionTest.java   |   3 +-
 .../ruta/expression/VariableInitialValueTest.java  |   8 +-
 .../AnnotationAddressExpressionTest.java           |  13 +-
 .../AnnotationFeatureExpressionTest.java           |   3 +-
 .../annotation/AnnotationLabelExpressionTest.java  | 219 +++++++++++----------
 .../AnnotationVariableExpressionTest.java          |  43 ++--
 .../expression/feature/FeatureStructureTest.java   |   3 +-
 .../number/ComposedNumberExpressionTest.java       |  10 +-
 .../number/FloatVariableExpressionTest.java        |   3 +-
 .../resource/WordListStringExpressionTest.java     |   2 +-
 .../resource/WordTableStringExpressionTest.java    |  32 +--
 .../ruta/expression/string/StringFeatureTest.java  |   2 +-
 .../string/StringSubtypeAllowedValuesTest.java     |  17 +-
 .../uima/ruta/expression/type/TypeFeatureTest.java |  11 +-
 .../apache/uima/ruta/resource/CSVTableTest.java    |   7 +-
 .../uima/ruta/resource/TreeWordListTest.java       |  17 +-
 .../uima/ruta/rule/ComposedRuleElementTest.java    |   3 +-
 .../ComposedRuleElementWithQuantifierTest.java     |   2 +-
 .../apache/uima/ruta/rule/ConjunctRulesTest.java   |   2 +-
 .../uima/ruta/rule/DynamicAnchoring1Test.java      |   2 +-
 .../uima/ruta/rule/DynamicAnchoring2Test.java      |   2 +-
 .../apache/uima/ruta/rule/ImplicitRuleTest.java    |   8 +-
 .../apache/uima/ruta/rule/InlinedRulesTest.java    |   2 +-
 .../uima/ruta/rule/InvisibleWildcardMatchTest.java |   3 +-
 .../uima/ruta/rule/LiteralStringMatchTest.java     |   2 +-
 .../apache/uima/ruta/rule/ManualAnchoringTest.java |   3 +-
 .../uima/ruta/rule/MarkInGreedyComposedTest.java   |   3 +-
 .../uima/ruta/rule/NestedDisjunctiveTest.java      |   3 +-
 .../uima/ruta/rule/OptionalComposedEndTest.java    |   2 +-
 .../OptionalDisjunctiveBeforeAnchoringTest.java    |   3 +-
 .../org/apache/uima/ruta/rule/RegExpRuleTest.java  |  57 +++---
 .../apache/uima/ruta/rule/RuleInference1Test.java  |   2 +-
 .../apache/uima/ruta/rule/RuleInference2Test.java  |   2 +-
 .../apache/uima/ruta/rule/RuleInference3Test.java  |   2 +-
 .../ruta/rule/RutaAnnotationTypeMatcherTest.java   |   3 +-
 .../uima/ruta/rule/RutaLiteralMatcherTest.java     |   2 +-
 .../ruta/rule/RutaOptionalRuleElementTest.java     |   2 +-
 .../uima/ruta/rule/SidestepInComposedTest.java     |   2 +-
 .../org/apache/uima/ruta/rule/WildCard1Test.java   |   2 +-
 .../org/apache/uima/ruta/rule/WildCard2Test.java   |   9 +-
 .../org/apache/uima/ruta/rule/WildCard3Test.java   |   2 +-
 .../uima/ruta/rule/WildCardInWindowTest.java       |   3 +-
 .../ruta/rule/quantifier/MinMaxQuantifierTest.java |   3 +-
 .../uima/ruta/rule/quantifier/Quantifier1Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier2Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier3Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier4Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier5Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier6Test.java |   2 +-
 .../uima/ruta/rule/quantifier/Quantifier7Test.java |   3 +-
 .../uima/ruta/rule/quantifier/Quantifier8Test.java |   3 +-
 .../uima/ruta/rule/quantifier/QuantifierTest.java  |  42 ++--
 .../rule/quantifier/ReverseQuantifierTest.java     |   3 +-
 .../apache/uima/ruta/seed/DefaultSeederTest.java   |  91 +++++----
 .../java/org/apache/uima/ruta/seed/NBSPWSTest.java |   3 +-
 .../org/apache/uima/ruta/seed/TextSeederTest.java  |   7 +-
 .../uima/ruta/type/TypeFromStringFunctionTest.java |   8 +-
 .../uima/ruta/verbalizer/ActionVerbalizerTest.java |  75 +++----
 .../ruta/verbalizer/ConditionVerbalizerTest.java   |  84 ++++----
 .../ruta/verbalizer/ExpressionVerbalizerTest.java  |  76 +++----
 .../uima/ruta/verbalizer/RutaVerbalizerTest.java   |  30 +--
 .../uima/ruta/verbalizer/ScriptVerbalizerTest.java |  11 +-
 .../uima/ruta/visitor/DebugAddToIndexesTest.java   |  11 +-
 .../ruta/visitor/InlinedRulesExplanationTest.java  |  33 ++--
 ruta-ep-core-ext/pom.xml                           |   5 -
 .../src/test/java/RutaTest.java                    |   3 +-
 ruta-maven-plugin/pom.xml                          |  38 ++--
 .../src/it/conflictingShortName/pom.xml            |  70 +++----
 .../uima/ruta/maven/ConflictingShortNameTest.java  |   3 +-
 ruta-maven-plugin/src/it/importByName/pom.xml      |  72 +++----
 .../org/apache/uima/ruta/maven/OneEngineTest.java  |   3 +-
 .../org/apache/uima/ruta/maven/OneEngineTest.java  |   2 +-
 ruta-maven-plugin/src/it/multimodule/pom.xml       |  41 ++--
 ruta-maven-plugin/src/it/wordlists/pom.xml         | 108 +++++-----
 .../org/apache/uima/ruta/maven/OneEngineTest.java  |   5 +-
 ruta-parent/pom.xml                                |  10 +-
 243 files changed, 1779 insertions(+), 1958 deletions(-)

diff --git a/example-projects/ruta-ep-example-extensions/pom.xml b/example-projects/ruta-ep-example-extensions/pom.xml
index 3ffd091c..1875c532 100644
--- a/example-projects/ruta-ep-example-extensions/pom.xml
+++ b/example-projects/ruta-ep-example-extensions/pom.xml
@@ -19,30 +19,33 @@
 -->
 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
-  <artifactId>ruta-ep-example-extensions</artifactId>
-  <name>Apache UIMA Ruta: ${project.artifactId}</name>
+
   <parent>
     <groupId>org.apache.uima</groupId>
     <artifactId>ruta-ep-parent</artifactId>
     <version>3.4.0-SNAPSHOT</version>
     <relativePath>../../ruta-ep-parent/pom.xml</relativePath>
   </parent>
+
+  <artifactId>ruta-ep-example-extensions</artifactId>
+
+  <name>Apache UIMA Ruta: ${project.artifactId}</name>
+  <url>${uimaWebsiteUrl}</url>
+
   <properties>
     <postNoticeText />
   </properties>
-  <url>${uimaWebsiteUrl}</url>
+
   <dependencies>
     <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core</artifactId>
       <version>${project.parent.version}</version>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-ep-ide</artifactId>
       <version>${project.parent.version}</version>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.uima</groupId>
@@ -59,6 +62,7 @@
         </exclusion>
       </exclusions>
     </dependency>
+
     <dependency>
       <groupId>${eclipseP2RepoId}</groupId>
       <artifactId>org.eclipse.equinox.app</artifactId>
@@ -69,9 +73,15 @@
       <artifactId>org.eclipse.emf.ecore.xmi</artifactId>
       <scope>provided</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -120,7 +130,7 @@
                   org.apache.uima.ruta.engine,
                   org.apache.uima.ruta.ide,
                   org.apache.uima.ruta.ide.ui,
-                  org.eclipse.dltk.core;bundle-version="3.0.0"
+                  org.eclipse.dltk.core;bundle-version="${dltk.version}"
                 </Require-Bundle>
                 <Import-Package>
                 </Import-Package>
@@ -136,7 +146,6 @@
           </execution>
         </executions>
       </plugin>
-
     </plugins>
   </build>
 </project>
\ No newline at end of file
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleActionTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleActionTest.java
index db4f1453..ed522aa5 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleActionTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleActionTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -27,7 +27,7 @@ import java.util.Map;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleActionTest {
 
@@ -41,11 +41,10 @@ public class ExampleActionTest {
     CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,
             namespace + "/test.txt", parameters, 50);
 
-    assertEquals(84, cas.getAnnotationIndex().size());
+    assertThat(cas.getAnnotationIndex()).hasSize(84);
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java
index e7831bfb..160e8834 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java
@@ -19,19 +19,18 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleBlockTest {
 
@@ -46,18 +45,13 @@ public class ExampleBlockTest {
             namespace + "/test.txt", parameters, 50);
 
     Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
 
     t = RutaTestUtils.getTestType(cas, 4);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    assertEquals("This is a test.", iterator.next().getCoveredText());
+    AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
+    assertThat(ai).extracting(AnnotationFS::getCoveredText).containsExactly("This is a test.");
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleConditionTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleConditionTest.java
index 8a2d07cc..70c5fbf9 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleConditionTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleConditionTest.java
@@ -19,19 +19,18 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleConditionTest {
 
@@ -45,19 +44,12 @@ public class ExampleConditionTest {
     CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,
             namespace + "/test.txt", parameters, 50);
 
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
-
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    assertEquals("1900/12/24", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
+    assertThat(ai).extracting(AnnotationFS::getCoveredText).containsExactly("1900/12/24");
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionTest.java
index d227e97b..18ea5234 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleNumberFunctionTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -30,7 +30,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleNumberFunctionTest {
 
@@ -45,15 +45,13 @@ public class ExampleNumberFunctionTest {
             namespace + "/test.txt", parameters, 50);
 
     Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
 
     t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
+    assertThat(ai).hasSize(1);
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionTest.java
index d8c895d2..561c03ae 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleStringFunctionTest.java
@@ -19,19 +19,18 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleStringFunctionTest {
 
@@ -45,15 +44,9 @@ public class ExampleStringFunctionTest {
     CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,
             namespace + "/test.txt", parameters, 50);
 
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
-
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    assertEquals("CW", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
+    assertThat(ai).extracting(AnnotationFS::getCoveredText).containsExactly("CW");
 
     if (cas != null) {
       cas.release();
diff --git a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleTypeFunctionTest.java b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleTypeFunctionTest.java
index b655041e..be00d16c 100644
--- a/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleTypeFunctionTest.java
+++ b/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleTypeFunctionTest.java
@@ -19,18 +19,16 @@
 
 package org.apache.uima.ruta.example.extensions;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.Type;
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExampleTypeFunctionTest {
 
@@ -45,19 +43,15 @@ public class ExampleTypeFunctionTest {
             namespace + "/test.txt", parameters, 50);
 
     Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
 
     t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(7, ai.size());
+    assertThat(cas.getAnnotationIndex(t)).hasSize(7);
 
     t = RutaTestUtils.getTestType(cas, 2);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(8, ai.size());
+    assertThat(cas.getAnnotationIndex(t)).hasSize(8);
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/example-projects/ruta-maven-example/pom.xml b/example-projects/ruta-maven-example/pom.xml
index 6bac305b..c0646bcb 100644
--- a/example-projects/ruta-maven-example/pom.xml
+++ b/example-projects/ruta-maven-example/pom.xml
@@ -45,17 +45,21 @@
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core</artifactId>
       <version>${project.version}</version>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core-ext</artifactId>
       <version>${project.version}</version>
-      <scope>compile</scope>
     </dependency>
+
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -65,7 +69,6 @@
     </dependency>
   </dependencies>
 
-
   <build>
     <resources>
       <resource>
diff --git a/example-projects/ruta-maven-example/src/test/java/org/apache/uima/ruta/example/ExampleTest.java b/example-projects/ruta-maven-example/src/test/java/org/apache/uima/ruta/example/ExampleTest.java
index f71770b3..bd69a6a5 100644
--- a/example-projects/ruta-maven-example/src/test/java/org/apache/uima/ruta/example/ExampleTest.java
+++ b/example-projects/ruta-maven-example/src/test/java/org/apache/uima/ruta/example/ExampleTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.example;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 import java.io.IOException;
@@ -36,7 +36,7 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.util.InvalidXMLException;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import uima.ruta.example.Author;
 import uima.ruta.example.Bibtex;
@@ -49,46 +49,46 @@ public class ExampleTest {
     File aeFile = new File(
             "target/generated-sources/ruta/descriptor/uima/ruta/example/MainEngine.xml");
 
-    AnalysisEngineDescription aed = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
-            new XMLInputSource(aeFile));
+    AnalysisEngineDescription aed = UIMAFramework.getXMLParser()
+            .parseAnalysisEngineDescription(new XMLInputSource(aeFile));
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
-    cas.setDocumentText("Ogren, P.V., Wetzler, P.G., Bethard, S.: ClearTK: A UIMA Toolkit for Statistical Natural Language Processing. In: UIMA for NLP workshop at LREC 08. (2008)");
+    cas.setDocumentText(
+            "Ogren, P.V., Wetzler, P.G., Bethard, S.: ClearTK: A UIMA Toolkit for Statistical Natural Language Processing. In: UIMA for NLP workshop at LREC 08. (2008)");
     ae.process(cas);
 
     JCas jCas = cas.getJCas();
     Collection<Bibtex> bibtexs = JCasUtil.select(jCas, Bibtex.class);
-    assertEquals(1, bibtexs.size());
+    assertThat(bibtexs.size()).isEqualTo(1);
     Bibtex bibtex = bibtexs.iterator().next();
-    assertEquals(
-            "Ogren, P.V., Wetzler, P.G., Bethard, S.: ClearTK: A UIMA Toolkit for Statistical Natural Language Processing. In: UIMA for NLP workshop at LREC 08. (2008)",
-            bibtex.getCoveredText());
-    assertEquals("Ogren, P.V., Wetzler, P.G., Bethard, S.:", bibtex.getAuthor().getCoveredText());
-    assertEquals("ClearTK: A UIMA Toolkit for Statistical Natural Language Processing.", bibtex
-            .getTitle().getCoveredText());
-    assertEquals("(2008)", bibtex.getYear().getCoveredText());
+    assertThat(bibtex.getCoveredText()).isEqualTo(
+            "Ogren, P.V., Wetzler, P.G., Bethard, S.: ClearTK: A UIMA Toolkit for Statistical Natural Language Processing. In: UIMA for NLP workshop at LREC 08. (2008)");
+    assertThat(bibtex.getAuthor().getCoveredText())
+            .isEqualTo("Ogren, P.V., Wetzler, P.G., Bethard, S.:");
+    assertThat(bibtex.getTitle().getCoveredText())
+            .isEqualTo("ClearTK: A UIMA Toolkit for Statistical Natural Language Processing.");
+    assertThat(bibtex.getYear().getCoveredText()).isEqualTo("(2008)");
   }
-  
+
   @Test
-  public void testAuthorWithMTWL() throws InvalidXMLException, IOException, ResourceInitializationException,
-          AnalysisEngineProcessException, CASException {
+  public void testAuthorWithMTWL() throws InvalidXMLException, IOException,
+          ResourceInitializationException, AnalysisEngineProcessException, CASException {
     File aeFile = new File(
             "target/generated-sources/ruta/descriptor/uima/ruta/example/AuthorWithMTWLEngine.xml");
 
-    AnalysisEngineDescription aed = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(
-            new XMLInputSource(aeFile));
+    AnalysisEngineDescription aed = UIMAFramework.getXMLParser()
+            .parseAnalysisEngineDescription(new XMLInputSource(aeFile));
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
-    cas.setDocumentText("Stephen Soderland, Claire Cardie, and Raymond Mooney. Learning Information Extraction Rules for Semi-Structured and Free Text. In Machine Learning, volume 34, pages 233–272, 1999.");
+    cas.setDocumentText(
+            "Stephen Soderland, Claire Cardie, and Raymond Mooney. Learning Information Extraction Rules for Semi-Structured and Free Text. In Machine Learning, volume 34, pages 233–272, 1999.");
     ae.process(cas);
 
     JCas jCas = cas.getJCas();
     Collection<Author> authors = JCasUtil.select(jCas, Author.class);
-    assertEquals(1, authors.size());
+    assertThat(authors).hasSize(1);
     Author author = authors.iterator().next();
-    assertEquals(
-            "Stephen Soderland, Claire Cardie, and Raymond Mooney.",
-            author.getCoveredText());
+    assertThat(author.getCoveredText())
+            .isEqualTo("Stephen Soderland, Claire Cardie, and Raymond Mooney.");
   }
-
 }
diff --git a/installEclipseSettings.sh b/installEclipseSettings.sh
index b41ac8c2..7e6f007f 100755
--- a/installEclipseSettings.sh
+++ b/installEclipseSettings.sh
@@ -45,3 +45,6 @@ installPrefs ruta-ep-textruler
 installPrefs ruta-maven-archetype
 installPrefs ruta-maven-plugin
 installPrefs ruta-parent
+installPrefs example-projects/ruta-ep-example-extensions
+installPrefs example-projects/ruta-maven-example
+installPrefs example-projects/ruta-tutorial-GermanNovels
diff --git a/ruta-core-ext/pom.xml b/ruta-core-ext/pom.xml
index 14128bb3..9c3d2f54 100644
--- a/ruta-core-ext/pom.xml
+++ b/ruta-core-ext/pom.xml
@@ -51,11 +51,16 @@
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core</artifactId>
       <version>${project.version}</version>
-      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/SimpleTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/SimpleTest.java
index c2c947b6..bdf606bd 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/SimpleTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/SimpleTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.block.fst;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.Type;
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SimpleTest {
 
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Informatik ist die Wissenschaft der systematischen Verarbeitung von Informationen,"
             + " insbesondere der automatischen Verarbeitung mit Hilfe von Digitalrechnern.";
     String script = "";
@@ -46,31 +44,22 @@ public class SimpleTest {
     script += "CW PERIOD{-> T3};\n";
     script += "CW COMMA{-> T4};\n";
     script += "}\n";
-    CAS cas = null;
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { FSTBlockExtension.class.getName() });
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
     Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
 
     t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(0, ai.size());
+    assertThat(cas.getAnnotationIndex(t)).isEmpty();
 
     t = RutaTestUtils.getTestType(cas, 2);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(5, ai.size());
+    assertThat(cas.getAnnotationIndex(t)).hasSize(5);
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/TimeTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/TimeTest.java
index 08eb1e79..52362d77 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/TimeTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/block/fst/TimeTest.java
@@ -31,8 +31,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.util.FileUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class TimeTest {
 
   private static final int numOfTests = 1;
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/FirstCharToUpperCaseStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/FirstCharToUpperCaseStringFunctionTest.java
index 09cc4b2f..b2b044bc 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/FirstCharToUpperCaseStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/FirstCharToUpperCaseStringFunctionTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FirstCharToUpperCaseStringFunctionTest {
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "peter markus test Peter Markus Test";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -46,29 +44,16 @@ public class FirstCharToUpperCaseStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
-    iterator = ai.iterator();
-    assertEquals("Peter", iterator.next().getCoveredText());
-    assertEquals("Markus", iterator.next().getCoveredText());
-    assertEquals("Test", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("Peter", "Markus", "Test");
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceAllStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceAllStringFunctionTest.java
index 8fdbab85..4bb2aba5 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceAllStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceAllStringFunctionTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ReplaceAllStringFunctionTest {
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Meter  test peter Kenny Motor";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -46,28 +44,17 @@ public class ReplaceAllStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
+    Type t = RutaTestUtils.getTestType(cas, 1);
 
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    assertEquals("Motor", iterator.next().getCoveredText());
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("Motor");
 
     if (cas != null) {
       cas.release();
     }
-
   }
-
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceFirstStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceFirstStringFunctionTest.java
index f8d5c8cd..53feca25 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceFirstStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ReplaceFirstStringFunctionTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ReplaceFirstStringFunctionTest {
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Berserker Barserker Barsarkar Barserkar";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -46,30 +44,16 @@ public class ReplaceFirstStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
-    iterator = ai.iterator();
-    assertEquals("Barserker", iterator.next().getCoveredText());
-    assertEquals("Barsarkar", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("Barserker", "Barsarkar");
 
     if (cas != null) {
       cas.release();
     }
-
   }
-
-
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/SubstringStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/SubstringStringFunctionTest.java
index c2a1fc5a..bb540e3c 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/SubstringStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/SubstringStringFunctionTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SubstringStringFunctionTest {
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Millimeter meter  test peter Kenny Motor";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -46,23 +44,15 @@ public class SubstringStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
     Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
 
     t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    assertEquals("meter", iterator.next().getCoveredText());
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("meter");
 
     if (cas != null) {
       cas.release();
@@ -70,5 +60,4 @@ public class SubstringStringFunctionTest {
 
   }
 
-
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToLowerCaseStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToLowerCaseStringFunctionTest.java
index c570218d..cc07ed98 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToLowerCaseStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToLowerCaseStringFunctionTest.java
@@ -19,25 +19,23 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ToLowerCaseStringFunctionTest {
 
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Peter Markus test peter markus test";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -47,28 +45,16 @@ public class ToLowerCaseStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
-    iterator = ai.iterator();
-    assertEquals("peter", iterator.next().getCoveredText());
-    assertEquals("markus", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("peter", "markus");
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToUpperCaseStringFunctionTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToUpperCaseStringFunctionTest.java
index 5ccb1059..9a1da19b 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToUpperCaseStringFunctionTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/ToUpperCaseStringFunctionTest.java
@@ -19,24 +19,22 @@
 
 package org.apache.uima.ruta.string;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
-import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ToUpperCaseStringFunctionTest {
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Peter Markus test PETER MARKUS test";
     String script = "STRING s;\n";
     script += "STRINGLIST sl;\n";
@@ -46,28 +44,16 @@ public class ToUpperCaseStringFunctionTest {
     Map<String, Object> parameters = new HashMap<String, Object>();
     parameters.put(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
             new String[] { StringOperationsExtension.class.getName() });
-    CAS cas = null;
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, parameters);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-
-    Type t = null;
-    AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, parameters);
 
-    t = RutaTestUtils.getTestType(cas, 1);
-    ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
-    iterator = ai.iterator();
-    assertEquals("PETER", iterator.next().getCoveredText());
-    assertEquals("MARKUS", iterator.next().getCoveredText());
+    Type t = RutaTestUtils.getTestType(cas, 1);
+    assertThat(cas.<AnnotationFS> getAnnotationIndex(t)) //
+            .extracting(AnnotationFS::getCoveredText) //
+            .containsExactly("PETER", "MARKUS");
 
     if (cas != null) {
       cas.release();
     }
-
   }
 }
diff --git a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/bool/VerbalizerTest.java b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/bool/VerbalizerTest.java
index b907a957..a8a1c8cd 100644
--- a/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/bool/VerbalizerTest.java
+++ b/ruta-core-ext/src/test/java/org/apache/uima/ruta/string/bool/VerbalizerTest.java
@@ -19,10 +19,11 @@
 
 package org.apache.uima.ruta.string.bool;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.uima.ruta.expression.string.SimpleStringExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class VerbalizerTest {
 
@@ -34,6 +35,6 @@ public class VerbalizerTest {
     BooleanOperationsExtension extension = new BooleanOperationsExtension();
     String verbalize = extension.verbalize(f, new RutaVerbalizer());
 
-    Assert.assertEquals("contains(\"abc\",\"def\")", verbalize);
+    assertThat(verbalize).isEqualTo("contains(\"abc\",\"def\")");
   }
 }
diff --git a/ruta-core/pom.xml b/ruta-core/pom.xml
index 1d60e044..f51aa525 100644
--- a/ruta-core/pom.xml
+++ b/ruta-core/pom.xml
@@ -50,7 +50,6 @@
     <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>uimaj-core</artifactId>
-      <version>${uima-version}</version>
     </dependency>
 
     <dependency>
@@ -82,14 +81,6 @@
     <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>uimaj-tools</artifactId>
-      <version>${uima-version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.uima</groupId>
-      <artifactId>uimaj-test-util</artifactId>
-      <version>${uima-version}</version>
-      <scope>test</scope>
     </dependency>
 
     <dependency>
@@ -131,34 +122,30 @@
     </dependency>
 
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
       <scope>test</scope>
     </dependency>
-    
-<!--     <dependency> -->
-<!--       <groupId>org.apache.uima</groupId> -->
-<!--       <artifactId>uimafit-junit</artifactId> -->
-<!--       <version>${uimafit-version}</version> -->
-<!--       <scope>test</scope> -->
-<!--       Exclude aop stuff, which is not need by uimafit and only introduces a non-asl license -->
-<!--       <exclusions> -->
-<!--         <exclusion> -->
-<!--           <groupId>org.springframework</groupId> -->
-<!--           <artifactId>spring-aop</artifactId> -->
-<!--         </exclusion> -->
-<!--         <exclusion> -->
-<!--           <groupId>aopalliance</groupId> -->
-<!--           <artifactId>aopalliance</artifactId> -->
-<!--         </exclusion> -->
-<!--       </exclusions> -->
-<!--     </dependency> -->
-
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-jdk14</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.uima</groupId>
+      <artifactId>uimaj-test-util</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.uima</groupId>
+      <artifactId>uimafit-junit</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/AdditionalScriptUimaFitTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/AdditionalScriptUimaFitTest.java
index f434df4f..a8284053 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/AdditionalScriptUimaFitTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/AdditionalScriptUimaFitTest.java
@@ -20,7 +20,7 @@
 package org.apache.uima.ruta;
 
 import static org.apache.uima.fit.factory.AnalysisEngineFactory.createEngineDescription;
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.analysis_engine.AnalysisEngine;
@@ -31,26 +31,26 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AdditionalScriptUimaFitTest {
 
   @Test
   public void test() throws Exception {
-    
+
     AnalysisEngineDescription aed = createEngineDescription(RutaEngine.class,
-            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG, false,
-            RutaEngine.PARAM_ADDITIONAL_SCRIPTS, new String[] {"org.apache.uima.ruta.Additional"}
-//            , RutaEngine.PARAM_STRICT_IMPORTS, true
-            );
-    
-    
+            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG,
+            false, RutaEngine.PARAM_ADDITIONAL_SCRIPTS,
+            new String[] { "org.apache.uima.ruta.Additional" }
+    // , RutaEngine.PARAM_STRICT_IMPORTS, true
+    );
+
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
     cas.setDocumentText("Some text 10.");
-    
+
     ae.process(cas);
-  
+
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
     FSIterator<AnnotationFS> iterator = null;
@@ -58,34 +58,33 @@ public class AdditionalScriptUimaFitTest {
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType1");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("10", iterator.next().getCoveredText());
-    
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("10");
+
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType2");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("Some", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some");
 
     cas.release();
   }
-  
+
   @Test
   public void testStrictImport() throws Exception {
-    
+
     AnalysisEngineDescription aed = createEngineDescription(RutaEngine.class,
-            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG, false,
-            RutaEngine.PARAM_ADDITIONAL_SCRIPTS, new String[] {"org.apache.uima.ruta.Additional"}
-            , RutaEngine.PARAM_STRICT_IMPORTS, true
-            );
-    
-    
+            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG,
+            false, RutaEngine.PARAM_ADDITIONAL_SCRIPTS,
+            new String[] { "org.apache.uima.ruta.Additional" }, RutaEngine.PARAM_STRICT_IMPORTS,
+            true);
+
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
     cas.setDocumentText("Some text 10.");
-    
+
     ae.process(cas);
-  
+
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
     FSIterator<AnnotationFS> iterator = null;
@@ -93,32 +92,31 @@ public class AdditionalScriptUimaFitTest {
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType1");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("10", iterator.next().getCoveredText());
-    
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("10");
+
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType2");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("Some", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some");
 
     cas.release();
   }
-  
+
   @Test
   public void testOnlyScriptImport() throws Exception {
-    
+
     AnalysisEngineDescription aed = createEngineDescription(RutaEngine.class,
-            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG, false
-            );
-    
-    
+            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Main", RutaEngine.PARAM_DEBUG,
+            false);
+
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
     cas.setDocumentText("Some text 10.");
-    
+
     ae.process(cas);
-  
+
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
     FSIterator<AnnotationFS> iterator = null;
@@ -126,14 +124,14 @@ public class AdditionalScriptUimaFitTest {
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType1");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("10", iterator.next().getCoveredText());
-    
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("10");
+
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.Additional.NewType2");
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("Some", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/AlternativeMatchTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/AlternativeMatchTest.java
index e63a1689..117af581 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/AlternativeMatchTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/AlternativeMatchTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AlternativeMatchTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/CommentBeforePackageTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/CommentBeforePackageTest.java
index 5550f397..5917ca03 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/CommentBeforePackageTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/CommentBeforePackageTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class CommentBeforePackageTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ConflictingTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ConflictingTypeTest.java
index 76d5c1a5..bb9618af 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ConflictingTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ConflictingTypeTest.java
@@ -18,8 +18,7 @@
  */
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
@@ -29,7 +28,7 @@ import org.apache.uima.fit.factory.AnalysisEngineFactory;
 import org.apache.uima.fit.factory.TypeSystemDescriptionFactory;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.ruta.engine.RutaEngine;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * There is no warning when short type names are ambiguous.
@@ -66,12 +65,10 @@ public class ConflictingTypeTest {
     cas.setDocumentText("text is not relevant here");
 
     try {
-      ae.process(cas);
-      fail("An IllegalArgumentException should be triggered because W is ambiguous.");
-    } catch (AnalysisEngineProcessException e) {
-      // we are expecting an IllegalArgumentException because both org.apache.uima.ruta.type.W and
-      // org.apache.uima.ruta.type.conflicting.W are imported into RUTA's namespace as W;
-      assertTrue(e.getCause() instanceof IllegalArgumentException);
+      assertThatExceptionOfType(AnalysisEngineProcessException.class)
+              .as("An IllegalArgumentException should be triggered because W is ambiguous.")
+              .isThrownBy(() -> ae.process(cas))
+              .withCauseInstanceOf(IllegalArgumentException.class);
     } finally {
       cas.release();
       ae.destroy();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java
index 0dd61f21..9d959ad0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConjunctiveRuleElementTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/CoveredTextTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/CoveredTextTest.java
index 5780c786..fc047380 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/CoveredTextTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/CoveredTextTest.java
@@ -28,8 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class CoveredTextTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/CustomViewTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/CustomViewTest.java
index 099e151c..e453b164 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/CustomViewTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/CustomViewTest.java
@@ -19,10 +19,9 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.uima.analysis_engine.AnalysisEngine;
@@ -34,9 +33,9 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.type.W;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests Ruta when it is runned on another view than _InitialView.
@@ -64,14 +63,14 @@ public class CustomViewTest {
     return builder.createAggregate();
   }
 
-  @Before
+  @BeforeEach
   public void setUp() throws Exception {
     final String name = this.getClass().getSimpleName();
     final String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/");
     engine = createAE(String.format("%s/%s", namespace, name));
   }
 
-  @After
+  @AfterEach
   public void tearDown() throws Exception {
     engine.destroy();
   }
@@ -89,8 +88,8 @@ public class CustomViewTest {
         words.add(a.getCoveredText());
       }
 
-      assertEquals("Checking run " + i, words,
-              Arrays.asList("This", "is", "a", "short", "document"));
+      assertThat(words).as("Checking run " + i).containsExactly("This", "is", "a", "short",
+              "document");
     }
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/DisjunctiveRuleElementTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/DisjunctiveRuleElementTest.java
index 2c5546c7..8feaf079 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/DisjunctiveRuleElementTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/DisjunctiveRuleElementTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class DisjunctiveRuleElementTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/EmptyDocumentTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/EmptyDocumentTest.java
index af6b368a..a2bcb134 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/EmptyDocumentTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/EmptyDocumentTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.FSIterator;
@@ -31,8 +31,7 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.rule.RuleInference1Test;
 import org.apache.uima.ruta.type.RutaBasic;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class EmptyDocumentTest {
 
@@ -48,9 +47,9 @@ public class EmptyDocumentTest {
     FSIterator<AnnotationFS> iterator = null;
 
     ai = cas.getAnnotationIndex();
-    assertEquals(2, ai.size());
+    assertThat(ai.size()).isEqualTo(2);
     iterator = ai.iterator();
-    assertEquals("", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("");
 
     if (cas != null) {
       cas.release();
@@ -73,10 +72,10 @@ public class EmptyDocumentTest {
     Ruta.apply(cas, "Document;");
 
     SelectFSs<RutaBasic> select = cas.select(RutaBasic.class);
-    Assert.assertEquals(1, select.count());
+    assertThat(select.count()).isEqualTo(1);
     RutaBasic rutaBasic = select.findAny().get();
-    Assert.assertEquals(0, rutaBasic.getBegin());
-    Assert.assertEquals(1, rutaBasic.getEnd());
+    assertThat(rutaBasic.getBegin()).isEqualTo(0);
+    assertThat(rutaBasic.getEnd()).isEqualTo(1);
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/EqualShortNameTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/EqualShortNameTest.java
index e33c037f..8dd8340e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/EqualShortNameTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/EqualShortNameTest.java
@@ -25,7 +25,7 @@ import java.util.Map;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class EqualShortNameTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ExternalWordResourceTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ExternalWordResourceTest.java
index 906612d8..61efe883 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ExternalWordResourceTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ExternalWordResourceTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ExternalWordResourceTest {
 
   @Test
@@ -47,9 +46,9 @@ public class ExternalWordResourceTest {
 //
 //    t = RutaTestUtils.getTestType(cas, 1);
 //    ai = cas.getAnnotationIndex(t);
-//    assertEquals(1, ai.size());
+//    assertThat(ai.size()).isEqualTo(1);
 //    iterator = ai.iterator();
-//    assertEquals("Some", iterator.next().getCoveredText());
+//    assertThat(iterator.next().getCoveredText()).isEqualTo("Some");
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch1Test.java
index d969dbff..1b827a1a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch1Test.java
@@ -29,7 +29,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FeatureMatch1Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch2Test.java
index 5cca11a0..7c2105ea 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/FeatureMatch2Test.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FeatureMatch2Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/FilteringTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/FilteringTest.java
index 48629832..8fb0518d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/FilteringTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/FilteringTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FilteringTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/GreedyAnchoringTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/GreedyAnchoringTest.java
index 0f575053..d3dc9963 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/GreedyAnchoringTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/GreedyAnchoringTest.java
@@ -26,8 +26,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class GreedyAnchoringTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/GreedyComposedWithConditionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/GreedyComposedWithConditionTest.java
index b20bb7a6..15d7d34c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/GreedyComposedWithConditionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/GreedyComposedWithConditionTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class GreedyComposedWithConditionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java
index 4ce3cd07..6aa82ff0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java
@@ -19,11 +19,10 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.lang3.tuple.Pair;
@@ -45,9 +44,8 @@ import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.type.FalsePositive;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test various import statements syntaxes (see UIMA-3303).
@@ -90,7 +88,7 @@ public class ImportStatementsTest {
       cas.setDocumentText("Word");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("Word"), selectText(cas, "org.apache.uima.ruta.Type1"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("Word");
     } finally {
       ae.destroy();
     }
@@ -104,7 +102,7 @@ public class ImportStatementsTest {
       cas.setDocumentText("Word");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("Word"), selectText(cas, "org.apache.uima.ruta.Type1"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("Word");
     } finally {
       ae.destroy();
     }
@@ -134,8 +132,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -150,8 +148,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -165,8 +163,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -181,8 +179,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.other.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.other.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.other.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.other.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -197,8 +195,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.other.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.other2.Type1"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.other.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.other2.Type1")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -213,8 +211,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -228,8 +226,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.other.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.other2.Type1"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.other.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.other2.Type1")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -243,8 +241,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.other3.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.other4.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.other3.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.other4.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -259,8 +257,8 @@ public class ImportStatementsTest {
       cas.setDocumentText("First Second");
       ae.process(cas);
 
-      assertEquals(Arrays.asList("First"), selectText(cas, "org.apache.uima.ruta.other3.Type1"));
-      assertEquals(Arrays.asList("Second"), selectText(cas, "org.apache.uima.ruta.other4.Type2"));
+      assertThat(selectText(cas, "org.apache.uima.ruta.other3.Type1")).containsExactly("First");
+      assertThat(selectText(cas, "org.apache.uima.ruta.other4.Type2")).containsExactly("Second");
     } finally {
       ae.destroy();
     }
@@ -289,7 +287,7 @@ public class ImportStatementsTest {
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testDeclareWithAliasParent() throws Exception {
 
     String document = "This is a test.";
@@ -316,8 +314,8 @@ public class ImportStatementsTest {
 
     analysisEngine.process(cas);
 
-    Assert.assertEquals(1, JCasUtil.select(cas.getJCas(), TruePositive.class).size());
-    Assert.assertEquals(1, JCasUtil.select(cas.getJCas(), FalsePositive.class).size());
+    assertThat(JCasUtil.select(cas.getJCas(), TruePositive.class)).hasSize(1);
+    assertThat(JCasUtil.select(cas.getJCas(), FalsePositive.class)).hasSize(1);
   }
 
   private List<String> selectText(CAS cas, String type) {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/IncompletePartitioningTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/IncompletePartitioningTest.java
index cded7ae1..bfa27a79 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/IncompletePartitioningTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/IncompletePartitioningTest.java
@@ -36,7 +36,7 @@ import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class IncompletePartitioningTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/IncrementalPartitioningTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/IncrementalPartitioningTest.java
index ae246f3d..988a98c7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/IncrementalPartitioningTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/IncrementalPartitioningTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class IncrementalPartitioningTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/IndexSkipTypesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/IndexSkipTypesTest.java
index 84a23b21..fdb4f559 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/IndexSkipTypesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/IndexSkipTypesTest.java
@@ -29,8 +29,7 @@ import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.EvalAnnotation;
 import org.apache.uima.ruta.type.FalseNegative;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class IndexSkipTypesTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/LoadResourceFromClassPathTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/LoadResourceFromClassPathTest.java
index 73c58633..f7ecd31e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/LoadResourceFromClassPathTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/LoadResourceFromClassPathTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LoadResourceFromClassPathTest {
 
@@ -50,11 +50,11 @@ public class LoadResourceFromClassPathTest {
     script += "TRIE(\"FirstNames.txt\" = T1, \"LastNames.txt\" = T2, list, true, 4, false, 0, \".,-/\");\n";
     script += "MARKTABLE(Person, 1, table, true, 0, \"\", 0, \"firstname\" = 2, \"system\" = 3);\n";
     script += "MARKFAST(T3, list2);\n";
-    
+
     Map<String, String> complexTypes = new TreeMap<String, String>();
     String typeName = "org.apache.uima.Person";
     complexTypes.put(typeName, "uima.tcas.Annotation");
-    
+
     Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>();
     List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
     features.put(typeName, list);
@@ -64,7 +64,7 @@ public class LoadResourceFromClassPathTest {
     list.add(new TestFeature(fn2, "", "uima.cas.String"));
 
     CAS cas = executeAnalysis(document, script, complexTypes, features);
-    
+
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "Peter", "Marshall", "Joern");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "Kluegl", "Schor", "Kottmann");
 
@@ -79,26 +79,26 @@ public class LoadResourceFromClassPathTest {
     Feature f1 = t.getFeatureByBaseName(fn1);
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
-    
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
+
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
-    
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
+
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
-    
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
+
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter", "Marshall", "Joern");
 
     cas.release();
@@ -142,32 +142,33 @@ public class LoadResourceFromClassPathTest {
     Feature f1 = t.getFeatureByBaseName(fn1);
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter", "Marshall", "Joern");
 
     cas.release();
   }
 
-  private CAS executeAnalysis(String document, String script, Map<String, String> complexTypes, Map<String, List<TestFeature>> features) {
+  private CAS executeAnalysis(String document, String script, Map<String, String> complexTypes,
+          Map<String, List<TestFeature>> features) {
     CAS cas = null;
     try {
       Map<String, Object> map = new HashMap<>();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/LoadScriptFromClassPathTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/LoadScriptFromClassPathTest.java
index 7430233a..4280dacb 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/LoadScriptFromClassPathTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/LoadScriptFromClassPathTest.java
@@ -26,7 +26,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LoadScriptFromClassPathTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy1Test.java
index e4405d0e..4cfa3d97 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy1Test.java
@@ -24,7 +24,7 @@ import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LongGreedy1Test {
 
@@ -47,10 +47,10 @@ public class LongGreedy1Test {
 
 //    t = RutaTestUtils.getTestType(cas, 1);
 //    ai = cas.getAnnotationIndex(t);
-//    assertEquals(1, ai.size());
+//    assertThat(ai.size()).isEqualTo(1);
 //    iterator = ai.iterator();
 //    String coveredText = iterator.next().getCoveredText();
-//    assertEquals(64998, coveredText.length());
+//    assertThat(coveredText.length()).isEqualTo(64998);
     
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy2Test.java
index ff15c552..dc99b202 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/LongGreedy2Test.java
@@ -24,7 +24,7 @@ import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LongGreedy2Test {
 
@@ -47,10 +47,10 @@ public class LongGreedy2Test {
 
     // t = RutaTestUtils.getTestType(cas, 2);
     // ai = cas.getAnnotationIndex(t);
-    // assertEquals(1, ai.size());
+    // assertThat(ai.size()).isEqualTo(1);
     // iterator = ai.iterator();
     // String coveredText2 = iterator.next().getCoveredText();
-    // assertEquals(64998, coveredText2.length());
+    // assertThat(coveredText2.length()).isEqualTo(64998);
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/NewCASPipelineTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/NewCASPipelineTest.java
index 18ff5b7f..20a9c770 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/NewCASPipelineTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/NewCASPipelineTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,7 +34,7 @@ import org.apache.uima.resource.metadata.ResourceMetaData;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.util.CasCreationUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests if the script is correctly applied in a pipeline if a new CAS is used.
@@ -79,7 +79,7 @@ public class NewCASPipelineTest {
     SimplePipeline.runPipeline(cas, ae);
 
     t1 = cas.getTypeSystem().getType(TEST_TYPE);
-    assertEquals(1, cas.getAnnotationIndex(t1).size());
+    assertThat(cas.getAnnotationIndex(t1).size()).isEqualTo(1);
 
     // reset the cas and do it again
     cas.reset();
@@ -87,7 +87,7 @@ public class NewCASPipelineTest {
     SimplePipeline.runPipeline(cas, ae);
 
     t1 = cas.getTypeSystem().getType(TEST_TYPE);
-    assertEquals(1, cas.getAnnotationIndex(t1).size());
+    assertThat(cas.getAnnotationIndex(t1).size()).isEqualTo(1);
 
     // create a new cas and force the ae to update its types
     ae.setConfigParameterValue(RutaEngine.PARAM_RELOAD_SCRIPT, true);
@@ -98,7 +98,7 @@ public class NewCASPipelineTest {
     SimplePipeline.runPipeline(cas2, ae);
 
     t1 = cas2.getTypeSystem().getType(TEST_TYPE);
-    assertEquals(1, cas2.getAnnotationIndex(t1).size());
+    assertThat(cas2.getAnnotationIndex(t1).size()).isEqualTo(1);
 
     // create a new cas and do not force the ae to update its types
     ae.setConfigParameterValue(RutaEngine.PARAM_RELOAD_SCRIPT, false);
@@ -108,7 +108,7 @@ public class NewCASPipelineTest {
     SimplePipeline.runPipeline(cas3, ae);
 
     t1 = cas3.getTypeSystem().getType(TEST_TYPE);
-    assertEquals(1, cas3.getAnnotationIndex(t1).size());
+    assertThat(cas3.getAnnotationIndex(t1).size()).isEqualTo(1);
 
     // create a new cas and do not reconfigure the engine
     final CAS cas4 = CasCreationUtils.createCas(metaData);
@@ -116,7 +116,7 @@ public class NewCASPipelineTest {
     SimplePipeline.runPipeline(cas4, ae);
 
     t1 = cas4.getTypeSystem().getType(TEST_TYPE);
-    assertEquals(1, cas4.getAnnotationIndex(t1).size());
+    assertThat(cas4.getAnnotationIndex(t1).size()).isEqualTo(1);
 
     if (ae != null) {
       ae.destroy();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/OutOfWindowTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/OutOfWindowTest.java
index 5b26a434..90add09f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/OutOfWindowTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/OutOfWindowTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OutOfWindowTest {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ReindexSkipTypesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ReindexSkipTypesTest.java
index cec3eb43..8d4d0657 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ReindexSkipTypesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ReindexSkipTypesTest.java
@@ -29,8 +29,7 @@ import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.CW;
 import org.apache.uima.ruta.type.SW;
 import org.apache.uima.ruta.type.TokenSeed;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ReindexSkipTypesTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ReindexUpdateModeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ReindexUpdateModeTest.java
index dd054d32..d9bda176 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ReindexUpdateModeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ReindexUpdateModeTest.java
@@ -27,9 +27,8 @@ import org.apache.uima.fit.util.CasUtil;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Ignore;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 public class ReindexUpdateModeTest {
 
   @Test
@@ -231,7 +230,7 @@ public class ReindexUpdateModeTest {
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testSafeAdditive() throws Exception {
 
     Map<String, Object> params = new LinkedHashMap<>();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/RemoveDocumentAnnotationTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/RemoveDocumentAnnotationTest.java
index d9c22924..112f65ba 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/RemoveDocumentAnnotationTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/RemoveDocumentAnnotationTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class RemoveDocumentAnnotationTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/RutaBasicUtilsTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/RutaBasicUtilsTest.java
index bf55a78b..3abd99b0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/RutaBasicUtilsTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/RutaBasicUtilsTest.java
@@ -18,94 +18,88 @@
  */
 package org.apache.uima.ruta;
 
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import java.util.Arrays;
 
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.cas.CAS;
-import org.apache.uima.fit.factory.JCasFactory;
+import org.apache.uima.fit.testing.junit.ManagedJCas;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.type.CW;
 import org.apache.uima.ruta.type.RutaBasic;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class RutaBasicUtilsTest {
 
-  // TODO use uimafit when released instead
-  // public @Rule ManagedJCas managedJCas = new ManagedJCas();
-
-  private static ThreadLocal<JCas> managedJCas = new ThreadLocal<>();
-
-  static {
-
-    try {
-      JCas jCas = JCasFactory.createJCas();
-      managedJCas.set(jCas);
-    } catch (Exception e) {
-      throw new IllegalStateException(e);
-    }
-  }
-
-  @Before
-  public void setup() {
-    managedJCas.get().reset();
-  }
-
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnNoBasics() throws AnalysisEngineProcessException {
+  private static @RegisterExtension ManagedJCas managedJCas = new ManagedJCas();
 
-    RutaBasicUtils.validateInternalIndexing(managedJCas.get(), null);
+  @Test
+  public void testBreakOnNoBasics() throws Exception {
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(managedJCas.get(), null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnDuplicateBasics() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnDuplicateBasics() throws Exception {
     JCas jcas = managedJCas.get();
     new RutaBasic(jcas, 0, 1).addToIndexes();
     new RutaBasic(jcas, 0, 1).addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnMissingBasicAtBegin() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnMissingBasicAtBegin() throws Exception {
     JCas jcas = managedJCas.get();
     new RutaBasic(jcas, 1, 2).addToIndexes();
     new CW(jcas, 0, 2).addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnMissingBasicAtEnd() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnMissingBasicAtEnd() throws Exception {
     JCas jcas = managedJCas.get();
     new RutaBasic(jcas, 0, 1).addToIndexes();
     new CW(jcas, 0, 2).addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnMissingAnnotationAtBegin() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnMissingAnnotationAtBegin() throws Exception {
     JCas jcas = managedJCas.get();
     CW cw = new CW(jcas, 0, 1);
     cw.addToIndexes();
     RutaBasic rb = new RutaBasic(jcas, 0, 1);
     rb.addEnd(cw, cw.getType());
     rb.addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnMissingAnnotationAtEnd() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnMissingAnnotationAtEnd() throws Exception {
     JCas jcas = managedJCas.get();
     CW cw = new CW(jcas, 0, 1);
     cw.addToIndexes();
     RutaBasic rb = new RutaBasic(jcas, 0, 1);
     rb.addBegin(cw, cw.getType());
     rb.addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
-  public void testBreakOnMissingPartof() throws AnalysisEngineProcessException {
+  @Test
+  public void testBreakOnMissingPartof() throws Exception {
     JCas jcas = managedJCas.get();
     CW cw = new CW(jcas, 0, 1);
     cw.addToIndexes();
@@ -113,11 +107,13 @@ public class RutaBasicUtilsTest {
     rb.addBegin(cw, cw.getType());
     rb.addEnd(cw, cw.getType());
     rb.addToIndexes();
-    RutaBasicUtils.validateInternalIndexing(jcas, null);
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> RutaBasicUtils.validateInternalIndexing(jcas, null));
   }
 
   @Test
-  public void testIgnoreTypeNames() throws AnalysisEngineProcessException {
+  public void testIgnoreTypeNames() throws Exception {
     JCas jcas = managedJCas.get();
     new RutaBasic(jcas, 0, 1).addToIndexes();
     new CW(jcas, 0, 1).addToIndexes();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/RutaParsingErrorTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/RutaParsingErrorTest.java
index 2cc3aba5..8cccc47b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/RutaParsingErrorTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/RutaParsingErrorTest.java
@@ -21,11 +21,12 @@ package org.apache.uima.ruta;
 
 import static org.apache.uima.ruta.engine.Ruta.apply;
 import static org.apache.uima.ruta.engine.RutaTestUtils.getCAS;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.extensions.RutaParseRuntimeException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /** Tests for exceptions thrown when parsing a Ruta script */
 public class RutaParsingErrorTest {
@@ -38,9 +39,11 @@ public class RutaParsingErrorTest {
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "aaaa.");
   }
 
-  @Test(expected = RutaParseRuntimeException.class)
+  @Test
   public void testEscapedDot() throws Exception {
     CAS cas = getCAS("aaaa");
-    apply(cas, "\"aaaa\\.\" -> T1;");
+
+    assertThatExceptionOfType(RutaParseRuntimeException.class)
+            .isThrownBy(() -> apply(cas, "\"aaaa\\.\" -> T1;"));
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/StrictImportTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/StrictImportTest.java
index 60452ef8..91a43901 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/StrictImportTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/StrictImportTest.java
@@ -19,11 +19,10 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,8 +45,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the strict import option of {@link org.apache.uima.ruta.engine.RutaEngine}.
@@ -115,8 +113,8 @@ public class StrictImportTest {
       }
     }
 
-    assertEquals(Arrays.asList("Word"), selectText(cas, "org.apache.uima.ruta.MyType"));
-    assertEquals(Arrays.asList("Word"), selectText(cas, script.replaceAll("/", ".") + ".T1"));
+    assertThat(selectText(cas, "org.apache.uima.ruta.MyType")).containsExactly("Word");
+    assertThat(selectText(cas, script.replaceAll("/", ".") + ".T1")).containsExactly("Word");
   }
 
   @Test
@@ -134,8 +132,8 @@ public class StrictImportTest {
       }
     }
 
-    assertEquals(Arrays.asList("Word"), selectText(cas, "org.apache.uima.ruta.MyType"));
-    assertEquals(Arrays.asList("Word"), selectText(cas, script.replaceAll("/", ".") + ".T1"));
+    assertThat(selectText(cas, "org.apache.uima.ruta.MyType")).containsExactly("Word");
+    assertThat(selectText(cas, script.replaceAll("/", ".") + ".T1")).containsExactly("Word");
   }
 
   private List<String> selectText(CAS cas, String type) {
@@ -169,8 +167,8 @@ public class StrictImportTest {
     Type t1 = cas.getTypeSystem().getType(s1);
     Type t2 = cas.getTypeSystem().getType(s2);
 
-    Assert.assertEquals(1, cas.getAnnotationIndex(t1).size());
-    Assert.assertEquals(1, cas.getAnnotationIndex(t2).size());
+    assertThat(cas.getAnnotationIndex(t1)).hasSize(1);
+    assertThat(cas.getAnnotationIndex(t2)).hasSize(1);
 
     cas.release();
   }
@@ -184,7 +182,7 @@ public class StrictImportTest {
     Ruta.apply(cas, "Document{->TruePositive};", params);
     AnnotationIndex<Annotation> annotationIndex = cas.getJCas()
             .getAnnotationIndex(TruePositive.type);
-    Assert.assertEquals(2, annotationIndex.size());
+    assertThat(annotationIndex).hasSize(2);
     cas.release();
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/SubAtomicTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/SubAtomicTest.java
index 0bad8c9c..11937515 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/SubAtomicTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/SubAtomicTest.java
@@ -27,7 +27,7 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SubAtomicTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/TypeAliasTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/TypeAliasTest.java
index bed97e6b..f696855d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/TypeAliasTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/TypeAliasTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.net.URL;
 
@@ -32,21 +32,20 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TypeAliasTest {
 
   @Test
   public void test() throws Exception {
     URL url = this.getClass().getResource("TypeAliasTestEngine.xml");
-    AnalysisEngineDescription aed = (AnalysisEngineDescription) UIMAFramework.getXMLParser().parse(
-            new XMLInputSource(url));
+    AnalysisEngineDescription aed = (AnalysisEngineDescription) UIMAFramework.getXMLParser()
+            .parse(new XMLInputSource(url));
 
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
     CAS cas = ae.newCAS();
     cas.setDocumentText("Peter");
     ae.process(cas);
-    
 
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
@@ -54,25 +53,25 @@ public class TypeAliasTest {
 
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.TypeAliasTest.T1");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
+    assertThat(ai.size()).isEqualTo(2);
     iterator = ai.iterator();
-    assertEquals("Peter", iterator.next().getCoveredText());
-    assertEquals("Peter", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.TypeAliasTest.T2");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
+    assertThat(ai.size()).isEqualTo(2);
     iterator = ai.iterator();
-    assertEquals("Peter", iterator.next().getCoveredText());
-    assertEquals("Peter", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+
     t = cas.getTypeSystem().getType("org.apache.uima.ruta.TypeAliasTest.T3");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(2, ai.size());
+    assertThat(ai.size()).isEqualTo(2);
     iterator = ai.iterator();
-    assertEquals("Peter", iterator.next().getCoveredText());
-    assertEquals("Peter", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Peter");
+
     cas.release();
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/TypeIgnorePatternTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/TypeIgnorePatternTest.java
index fcc0e047..9b433c0b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/TypeIgnorePatternTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/TypeIgnorePatternTest.java
@@ -26,8 +26,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class TypeIgnorePatternTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/WSDictionaryTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/WSDictionaryTest.java
index 52943745..d0d76e5b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/WSDictionaryTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/WSDictionaryTest.java
@@ -19,10 +19,8 @@
 
 package org.apache.uima.ruta;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -35,21 +33,17 @@ import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
-import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.seed.DefaultSeeder;
-import org.apache.uima.util.InvalidXMLException;
-import org.junit.Test;
-import org.xml.sax.SAXException;
+import org.junit.jupiter.api.Test;
 
 public class WSDictionaryTest {
 
   @Test
-  public void test()
-          throws SAXException, ResourceInitializationException, InvalidXMLException, IOException {
+  public void test() throws Exception {
     String document = "Peter Kluegl, Marshall Schor, Joern Kottmann\n";
     document += "PeterKluegl, MarshallSchor, JoernKottmann\n";
     document += "Peter<x>Kluegl, Marshall<x>Schor, Joern<x>Kottmann\n";
@@ -83,8 +77,7 @@ public class WSDictionaryTest {
   }
 
   @Test
-  public void testTableWithWS()
-          throws ResourceInitializationException, IOException, InvalidXMLException, SAXException {
+  public void testTableWithWS() throws Exception {
     String document = "Peter Kluegl, Marshall Schor, Joern Kottmann\n";
     document += "PeterKluegl, MarshallSchor, JoernKottmann\n";
     document += "Peter<x>Kluegl, Marshall<x>Schor, Joern<x>Kottmann\n";
@@ -116,75 +109,71 @@ public class WSDictionaryTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(9, ai.size());
+    assertThat(ai.size()).isEqualTo(9);
     iterator = ai.iterator();
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter Kluegl", v1);
-    assertEquals("UIMA Ruta", v2);
+    assertThat(v1).isEqualTo("Peter Kluegl");
+    assertThat(v2).isEqualTo("UIMA Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall Schor", v1);
-    assertEquals("UIMA Core", v2);
+    assertThat(v1).isEqualTo("Marshall Schor");
+    assertThat(v2).isEqualTo("UIMA Core");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern Kottmann", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern Kottmann");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter Kluegl", v1);
-    assertEquals("UIMA Ruta", v2);
+    assertThat(v1).isEqualTo("Peter Kluegl");
+    assertThat(v2).isEqualTo("UIMA Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall Schor", v1);
-    assertEquals("UIMA Core", v2);
+    assertThat(v1).isEqualTo("Marshall Schor");
+    assertThat(v2).isEqualTo("UIMA Core");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern Kottmann", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern Kottmann");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter Kluegl", v1);
-    assertEquals("UIMA Ruta", v2);
+    assertThat(v1).isEqualTo("Peter Kluegl");
+    assertThat(v2).isEqualTo("UIMA Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall Schor", v1);
-    assertEquals("UIMA Core", v2);
+    assertThat(v1).isEqualTo("Marshall Schor");
+    assertThat(v2).isEqualTo("UIMA Core");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern Kottmann", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern Kottmann");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     cas.release();
   }
 
-  private CAS executeAnalysis(CAS cas, String script) {
-    try {
-      Map<String, Object> map = new HashMap<>();
-      map.put(RutaEngine.PARAM_DICT_REMOVE_WS, true);
-      map.put(RutaEngine.PARAM_SEEDERS, new String[] { DefaultSeeder.class.getName() });
-      Ruta.apply(cas, script, map);
-    } catch (Exception e) {
-      fail("Failed to execute analysis engine. Reason: " + e.getMessage());
-    }
+  private CAS executeAnalysis(CAS cas, String script) throws Exception {
+    Map<String, Object> map = new HashMap<>();
+    map.put(RutaEngine.PARAM_DICT_REMOVE_WS, true);
+    map.put(RutaEngine.PARAM_SEEDERS, new String[] { DefaultSeeder.class.getName() });
+    Ruta.apply(cas, script, map);
     return cas;
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/ZeroLengthAnnotationTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/ZeroLengthAnnotationTest.java
index df3bd278..4a31ca19 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/ZeroLengthAnnotationTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/ZeroLengthAnnotationTest.java
@@ -24,8 +24,7 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ZeroLengthAnnotationTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddFilterTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddFilterTypeTest.java
index c7109e6b..2e8eb8c1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddFilterTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddFilterTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AddFilterTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddRetainTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddRetainTypeTest.java
index 2331ac26..a839611c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddRetainTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddRetainTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AddRetainTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java
index a668e9be..d6d7a155 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/AddTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class AddTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/AssignActionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/AssignActionTest.java
index eaf32651..68942513 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/AssignActionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/AssignActionTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AssignActionTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/ClearTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/ClearTest.java
index e0ffe0e9..939dd9f9 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/ClearTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/ClearTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ClearTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/ConfigureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/ConfigureTest.java
index 7371c684..41ef9ea1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/ConfigureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/ConfigureTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.action;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Collection;
 
 import org.apache.uima.cas.CAS;
@@ -27,9 +29,8 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.Statistics;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class ConfigureTest {
 
@@ -45,11 +46,11 @@ public class ConfigureTest {
     JCas jcas = cas.getJCas();
     Collection<Statistics> statistics = JCasUtil.select(jcas, Statistics.class);
 
-    Assert.assertFalse(statistics.isEmpty());
+    assertThat(statistics.isEmpty()).isFalse();
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testSelfConfigure() throws Exception {
 
     RutaTestUtils.processTestScript(this.getClass());
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java
index c67e2e65..93a50e33 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java
@@ -19,8 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,7 +37,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class CreateTest {
 
@@ -75,15 +74,15 @@ public class CreateTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     Feature f3 = t.getFeatureByBaseName(fn3);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
     v1 = (AnnotationFS) next.getFeatureValue(f1);
     v2 = (AnnotationFS) next.getFeatureValue(f2);
     int intValue = next.getIntValue(f3);
-    assertEquals("A", v1.getCoveredText());
-    assertEquals("B", v2.getCoveredText());
-    assertEquals(2, intValue);
+    assertThat(v1.getCoveredText()).isEqualTo("A");
+    assertThat(v2.getCoveredText()).isEqualTo("B");
+    assertThat(intValue).isEqualTo(2);
 
     cas.release();
   }
@@ -132,13 +131,13 @@ public class CreateTest {
     t = cas.getTypeSystem().getType(typeName3);
     Feature f3 = t.getFeatureByBaseName(fn3);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
     FeatureStructure fv1 = next.getFeatureValue(f3);
-    assertNotNull(fv1);
+    assertThat(fv1).isNotNull();
 
-    assertEquals("Test", ((AnnotationFS) fv1).getCoveredText());
+    assertThat(((AnnotationFS) fv1).getCoveredText()).isEqualTo("Test");
 
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
index 0be768a8..c5ef31de 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +36,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FillTest {
 
@@ -56,11 +56,11 @@ public class FillTest {
     t = cas.getTypeSystem().getType(type);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     AnnotationFS afs = iterator.next();
     Feature featureByBaseName = t.getFeatureByBaseName("language");
     String stringValue = afs.getStringValue(featureByBaseName);
-    assertEquals("en", stringValue);
+    assertThat(stringValue).isEqualTo("en");
   }
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/FilterTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/FilterTypeTest.java
index 663c231f..ce9c76d8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/FilterTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/FilterTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FilterTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/GatherTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/GatherTest.java
index df45ade3..b6d0f403 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/GatherTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/GatherTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +36,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GatherTest {
 
@@ -70,13 +70,13 @@ public class GatherTest {
     Feature f1 = t.getFeatureByBaseName(fn1);
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
     v1 = (AnnotationFS) next.getFeatureValue(f1);
     v2 = (AnnotationFS) next.getFeatureValue(f2);
-    assertEquals("A", v1.getCoveredText());
-    assertEquals("B", v2.getCoveredText());
+    assertThat(v1.getCoveredText()).isEqualTo("A");
+    assertThat(v2.getCoveredText()).isEqualTo("B");
 
   }
 
@@ -111,13 +111,13 @@ public class GatherTest {
     Feature f1 = t.getFeatureByBaseName(fn1);
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
     v1 = (AnnotationFS) next.getFeatureValue(f1);
     v2 = (AnnotationFS) next.getFeatureValue(f2);
-    assertEquals("A", v1.getCoveredText());
-    assertEquals(null, v2);
+    assertThat(v1.getCoveredText()).isEqualTo("A");
+    assertThat(v2).isEqualTo(null);
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetFeatureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetFeatureTest.java
index 75f1befb..a92f8d47 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetFeatureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetFeatureTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GetFeatureTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetListTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetListTest.java
index f7373743..8775fa8e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetListTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetListTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GetListTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetTest.java
index ecabad8a..72e6d4d0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/GetTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/GetTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class GetTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java
index 0f590cbd..f81021e8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java
@@ -31,7 +31,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ImplicitActionTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java
index 9836db0a..0d9dcfb0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LabelAtActionTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java
index 8641ad55..881ee96e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MacroActionTest.java
@@ -19,8 +19,8 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -40,8 +40,8 @@ import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.extensions.RutaParseRuntimeException;
 import org.assertj.core.api.Assertions;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class MacroActionTest {
 
@@ -145,21 +145,23 @@ public class MacroActionTest {
     Assertions.assertThat(refValue).extracting(AnnotationFS::getCoveredText).isEqualTo("Father");
   }
 
-  @Test(expected = RutaParseRuntimeException.class)
+  @Test
   public void testRecursiveDeclaration() throws Exception {
     String document = "Test";
-    String script = "";
-    script += "ACTION action1() = action2();\n";
-    script += "ACTION action2() = action3();\n";
-    script += "ACTION action3() = action1();\n";
-    script += "CW{-> action1()};\n";
+    String script = String.join("\n", //
+            "ACTION action1() = action2();", //
+            "ACTION action2() = action3();", //
+            "ACTION action3() = action1();", //
+            "CW{-> action1()};\n");
 
     CAS cas = RutaTestUtils.getCAS(document);
-    Ruta.apply(cas, script);
+
+    assertThatExceptionOfType(RutaParseRuntimeException.class)
+            .isThrownBy(() -> Ruta.apply(cas, script));
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testShareSameNameArgumentAndLabel() throws Exception {
     String document = "Day 5";
     String script = "ACTION CreateDate(ANNOTATION day) = CREATE(Date, \"day\"=day);\n";
@@ -192,9 +194,9 @@ public class MacroActionTest {
     AnnotationFS nextFS = iterator.next();
 
     FeatureStructure fv1 = nextFS.getFeatureValue(feat);
-    assertNotNull(fv1);
+    assertThat(fv1).isNotNull();
 
-    assertEquals("5", ((AnnotationFS) fv1).getCoveredText());
+    assertThat(((AnnotationFS) fv1).getCoveredText()).isEqualTo("5");
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastReloadTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastReloadTest.java
index 4007c99c..60ae2319 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastReloadTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastReloadTest.java
@@ -25,8 +25,7 @@ import java.util.Map;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class MarkFastReloadTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastTest.java
index 72b77fb4..ab35b4d5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastTest.java
@@ -29,7 +29,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkFastTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastWithFeatureProjectionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastWithFeatureProjectionTest.java
index 07cc7669..41ff7866 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastWithFeatureProjectionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFastWithFeatureProjectionTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,7 +35,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkFastWithFeatureProjectionTest {
 
@@ -80,28 +80,28 @@ public class MarkFastWithFeatureProjectionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(4, ai.size());
+    assertThat(ai.size()).isEqualTo(4);
     iterator = ai.iterator();
-    
+
     AnnotationFS next = iterator.next();
-    assertEquals("c", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("c");
     String featureValue = next.getStringValue(f1);
-    assertEquals("X", featureValue);
+    assertThat(featureValue).isEqualTo("X");
 
     next = iterator.next();
-    assertEquals("c", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("c");
     featureValue = next.getStringValue(f1);
-    assertEquals("X", featureValue);
+    assertThat(featureValue).isEqualTo("X");
 
     next = iterator.next();
-    assertEquals("c", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("c");
     featureValue = next.getStringValue(f1);
-    assertEquals("X", featureValue);
-    
+    assertThat(featureValue).isEqualTo("X");
+
     next = iterator.next();
-    assertEquals("c", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("c");
     featureValue = next.getStringValue(f1);
-    assertEquals("X", featureValue);
+    assertThat(featureValue).isEqualTo("X");
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFirstActionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFirstActionTest.java
index e4d517b9..83fc5ce8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFirstActionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkFirstActionTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkFirstActionTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkLastTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkLastTest.java
index 701eebb1..4750fc65 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkLastTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkLastTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkLastTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkOnceTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkOnceTest.java
index 3667026f..6ff33d42 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkOnceTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkOnceTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkOnceTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkScoreTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkScoreTest.java
index 23870c28..1356878c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkScoreTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkScoreTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkScoreTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableReloadTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableReloadTest.java
index 1ee7b9f2..23e6a7d1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableReloadTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableReloadTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.seed.DefaultSeeder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkTableReloadTest {
 
@@ -78,44 +78,44 @@ public class MarkTableReloadTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(6, ai.size());
+    assertThat(ai.size()).isEqualTo(6);
     iterator = ai.iterator();
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableTest.java
index 3bc6dfd5..dbf6e59f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTableTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.seed.DefaultSeeder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkTableTest {
 
@@ -74,44 +74,44 @@ public class MarkTableTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(6, ai.size());
+    assertThat(ai.size()).isEqualTo(6);
     iterator = ai.iterator();
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTest.java
index 36061e4f..161e0a87 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MarkTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MarkTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MatchedTextTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MatchedTextTest.java
index 85692187..6e06892d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MatchedTextTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MatchedTextTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MatchedTextTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/MergeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/MergeTest.java
index ecea14cc..a0c101ef 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/MergeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/MergeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MergeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveDuplicateTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveDuplicateTest.java
index 6c67bf2a..dc685a22 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveDuplicateTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveDuplicateTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RemoveDuplicateTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveFilterTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveFilterTypeTest.java
index c840f3b4..31525654 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveFilterTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveFilterTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RemoveFilterTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveRetainTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveRetainTypeTest.java
index 279cbcc5..13334e74 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveRetainTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveRetainTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RemoveRetainTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveTest.java
index 001a537d..a599ed66 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/RemoveTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RemoveTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/ReplaceTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/ReplaceTest.java
index 6a1c0ca9..8aa35d50 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/ReplaceTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/ReplaceTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.FSIterator;
@@ -29,7 +29,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ReplaceTest {
 
@@ -49,7 +49,7 @@ public class ReplaceTest {
     AnnotationFS afs = iterator.get();
     Feature feature = t.getFeatureByBaseName("replacement");
     String stringValue = afs.getStringValue(feature);
-    assertEquals("MARKUP", stringValue);
+    assertThat(stringValue).isEqualTo("MARKUP");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/RetainTypeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/RetainTypeTest.java
index c9dd3a92..f1b45076 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/RetainTypeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/RetainTypeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RetainTypeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/SetFeatureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/SetFeatureTest.java
index 30efe6f3..5ae96a6e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/SetFeatureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/SetFeatureTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Map;
 import java.util.TreeMap;
@@ -32,7 +32,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SetFeatureTest {
 
@@ -45,8 +45,8 @@ public class SetFeatureTest {
     complexTypes.put(type, CAS.TYPE_NAME_DOCUMENT_ANNOTATION);
     CAS cas = null;
     try {
-      cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/" + name
-              + ".txt", 50, false, false, complexTypes, null);
+      cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,
+              namespace + "/" + name + ".txt", 50, false, false, complexTypes, null);
     } catch (Exception e) {
       e.printStackTrace();
       assert (false);
@@ -58,12 +58,12 @@ public class SetFeatureTest {
     t = cas.getTypeSystem().getType(type);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     AnnotationFS afs = iterator.next();
     Feature featureByBaseName = t.getFeatureByBaseName("language");
     String stringValue = afs.getStringValue(featureByBaseName);
-    assertEquals("en", stringValue);
-   
+    assertThat(stringValue).isEqualTo("en");
+
     cas.release();
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift1Test.java
index ffca39ac..2efb0ae9 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift1Test.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Shift1Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift2Test.java
index 1fbf532d..73b93d86 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/Shift2Test.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -39,7 +39,7 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.seed.DefaultSeeder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Shift2Test {
 
@@ -76,13 +76,13 @@ public class Shift2Test {
     Feature f2 = type.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(type);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     AnnotationFS next = iterator.next();
     AnnotationFS v1 = (AnnotationFS) next.getFeatureValue(f1);
     String v2 = next.getStringValue(f2);
-    assertEquals("only some text<br/>", v1.getCoveredText());
-    assertEquals("unknown", v2);
-    assertEquals("only some text", next.getCoveredText());
+    assertThat(v1.getCoveredText()).isEqualTo("only some text<br/>");
+    assertThat(v2).isEqualTo("unknown");
+    assertThat(next.getCoveredText()).isEqualTo("only some text");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/ShiftWithLowMemoryProfileTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/ShiftWithLowMemoryProfileTest.java
index f9951a03..97c5e9c5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/ShiftWithLowMemoryProfileTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/ShiftWithLowMemoryProfileTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -31,7 +31,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * There was a {@link NullPointerException} when calling
@@ -52,9 +52,9 @@ public class ShiftWithLowMemoryProfileTest {
 
     Type t = cas.getTypeSystem().getType("org.apache.uima.ruta.type.W");
     AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     FSIterator<AnnotationFS> iterator = ai.iterator();
-    assertEquals("A", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("A");
     cas.release();
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
index 3173f569..bac99c96 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java
@@ -19,8 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -37,7 +36,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SplitTest {
 
@@ -70,25 +69,25 @@ public class SplitTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("More text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text");
     FeatureStructure featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals("with 1", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("with 1");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals("and more", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("and more");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
   }
 
@@ -121,25 +120,25 @@ public class SplitTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("More text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text");
     FeatureStructure featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals(", with 1", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(", with 1");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals(", and more", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(", and more");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
   }
 
@@ -172,25 +171,25 @@ public class SplitTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("More text ,", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text ,");
     FeatureStructure featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals("with 1 ,", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("with 1 ,");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals("and more", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("and more");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
   }
 
@@ -223,25 +222,25 @@ public class SplitTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("More text ,", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text ,");
     FeatureStructure featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals(", with 1 ,", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(", with 1 ,");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals(", and more", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(", and more");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
   }
 
@@ -276,25 +275,25 @@ public class SplitTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("More text ,", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text ,");
     FeatureStructure featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals("with 1", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("with 1");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
     next = iterator.next();
-    assertEquals(", and more", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(", and more");
     featureValue = next.getFeatureValue(f1);
-    assertNotNull(featureValue);
-    assertEquals("1", ((AnnotationFS) featureValue).getCoveredText());
+    assertThat(featureValue).isNotNull();
+    assertThat(((AnnotationFS) featureValue).getCoveredText()).isEqualTo("1");
 
   }
 
@@ -315,16 +314,16 @@ public class SplitTest {
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("Some text.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("Some text.");
 
     next = iterator.next();
-    assertEquals("More text , with 1 , and more.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More text , with 1 , and more.");
 
     next = iterator.next();
-    assertEquals("even more text.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("even more text.");
 
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/Transfer2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/Transfer2Test.java
index 3d3eb1ac..ecb7593e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/Transfer2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/Transfer2Test.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,7 +35,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Transfer2Test {
 
@@ -47,13 +47,13 @@ public class Transfer2Test {
     script += "DECLARE Annotation BigAnnotation( STRING laonName, STRING loanType, STRING cardName, STRING cardType);\n";
     script += "\"Visa\" -> CardType (\"cardName\" = \"Peter\", \"cardType\" = \"Visa\");\n";
     script += "CardType{->TRANSFER(BigAnnotation)};";
-    
+
     Map<String, String> typeMap = new TreeMap<String, String>();
     String typeName1 = "CardType";
     typeMap.put(typeName1, "uima.tcas.Annotation");
     String typeName2 = "BigAnnotation";
     typeMap.put(typeName2, "uima.tcas.Annotation");
-    
+
     Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
     List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
     featureMap.put(typeName1, list);
@@ -61,7 +61,7 @@ public class Transfer2Test {
     list.add(new TestFeature(fn1, "", "uima.cas.String"));
     String fn2 = "cardType";
     list.add(new TestFeature(fn2, "", "uima.cas.String"));
-    
+
     list = new ArrayList<RutaTestUtils.TestFeature>();
     featureMap.put(typeName2, list);
     list.add(new TestFeature(fn1, "", "uima.cas.String"));
@@ -70,7 +70,7 @@ public class Transfer2Test {
     list.add(new TestFeature(fn3, "", "uima.cas.String"));
     String fn4 = "loanType";
     list.add(new TestFeature(fn4, "", "uima.cas.String"));
-    
+
     CAS cas = null;
     try {
       cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
@@ -82,17 +82,17 @@ public class Transfer2Test {
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
     FSIterator<AnnotationFS> iterator = null;
-    
+
     t = cas.getTypeSystem().getType(typeName2);
     Feature f1 = t.getFeatureByBaseName(fn1);
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("Peter", next.getStringValue(f1));
-    assertEquals("Visa", next.getStringValue(f2));
-    
+    assertThat(next.getStringValue(f1)).isEqualTo("Peter");
+    assertThat(next.getStringValue(f2)).isEqualTo("Visa");
+
     if (cas != null) {
       cas.release();
     }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/TransferTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/TransferTest.java
index bac96131..fdff5785 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/TransferTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/TransferTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Arrays;
 import java.util.LinkedHashMap;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TransferTest {
 
@@ -63,11 +63,11 @@ public class TransferTest {
     t = cas.getTypeSystem().getType(type);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     AnnotationFS afs = iterator.next();
     Feature featureByBaseName = t.getFeatureByBaseName("language");
     String stringValue = afs.getStringValue(featureByBaseName);
-    assertEquals("x-unspecified", stringValue);
+    assertThat(stringValue).isEqualTo("x-unspecified");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/TrieTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/TrieTest.java
index 2f422bfb..83aacb42 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/TrieTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/TrieTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.action;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -36,7 +36,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TrieTest {
 
@@ -49,17 +49,17 @@ public class TrieTest {
 
       CAS cas = null;
       try {
-        cas = RutaTestUtils.process(
-                namespace + "/" + scriptname + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/"
-                        + name + ".txt", 50, false, false, null, namespace + "/");
+        cas = RutaTestUtils.process(namespace + "/" + scriptname + RutaEngine.SCRIPT_FILE_EXTENSION,
+                namespace + "/" + name + ".txt", 50, false, false, null, namespace + "/");
       } catch (Exception e) {
         e.printStackTrace();
         assert (false);
       }
-      
+
       RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "Peter", "Marshall", "Joern");
       RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "Kluegl", "Schor", "Kottmann");
-      RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter Kluegl", "Marshall Schor", "Joern Kottmann");
+      RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter Kluegl", "Marshall Schor",
+              "Joern Kottmann");
       RutaTestUtils.assertAnnotationsEquals(cas, 4, 3, "Peter Kluegl: Ruta", "Marshall Schor: UIMA",
               "Joern Kottmann: CAS Editor");
 
@@ -110,47 +110,47 @@ public class TrieTest {
     t = cas.getTypeSystem().getType(typeNameA);
     feature = t.getFeatureByBaseName("a");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("Peter", next.getCoveredText());
-    assertEquals("first", next.getStringValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Peter");
+    assertThat(next.getStringValue(feature)).isEqualTo("first");
     next = iterator.next();
-    assertEquals("Marshall", next.getCoveredText());
-    assertEquals("first", next.getStringValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Marshall");
+    assertThat(next.getStringValue(feature)).isEqualTo("first");
     next = iterator.next();
-    assertEquals("Joern", next.getCoveredText());
-    assertEquals("first", next.getStringValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Joern");
+    assertThat(next.getStringValue(feature)).isEqualTo("first");
 
     t = cas.getTypeSystem().getType(typeNameB);
     feature = t.getFeatureByBaseName("b");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("Kluegl", next.getCoveredText());
-    assertEquals(true, next.getBooleanValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Kluegl");
+    assertThat(next.getBooleanValue(feature)).isEqualTo(true);
     next = iterator.next();
-    assertEquals("Schor", next.getCoveredText());
-    assertEquals(true, next.getBooleanValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Schor");
+    assertThat(next.getBooleanValue(feature)).isEqualTo(true);
     next = iterator.next();
-    assertEquals("Kottmann", next.getCoveredText());
-    assertEquals(true, next.getBooleanValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Kottmann");
+    assertThat(next.getBooleanValue(feature)).isEqualTo(true);
 
     t = cas.getTypeSystem().getType(typeNameC);
     feature = t.getFeatureByBaseName("c");
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("Peter Kluegl", next.getCoveredText());
-    assertEquals(6, next.getIntValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Peter Kluegl");
+    assertThat(next.getIntValue(feature)).isEqualTo(6);
     next = iterator.next();
-    assertEquals("Marshall Schor", next.getCoveredText());
-    assertEquals(6, next.getIntValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Marshall Schor");
+    assertThat(next.getIntValue(feature)).isEqualTo(6);
     next = iterator.next();
-    assertEquals("Joern Kottmann", next.getCoveredText());
-    assertEquals(6, next.getIntValue(feature));
+    assertThat(next.getCoveredText()).isEqualTo("Joern Kottmann");
+    assertThat(next.getIntValue(feature)).isEqualTo(6);
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/TrimTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/TrimTest.java
index 19755e5b..300420f6 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/TrimTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/TrimTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.action;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TrimTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkAllTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkAllTest.java
index 5889ab12..ad25ae52 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkAllTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkAllTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class UnmarkAllTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkTest.java
index 3eb42897..cc567bf7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/UnmarkTest.java
@@ -29,7 +29,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class UnmarkTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/block/DocumentBlockTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/block/DocumentBlockTest.java
index 33a1e5a8..6faf08d5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/block/DocumentBlockTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/block/DocumentBlockTest.java
@@ -26,8 +26,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class DocumentBlockTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
index 022314a9..7a1a1d31 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
@@ -31,9 +31,8 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
 import org.apache.uima.ruta.seed.TextSeeder;
-import org.junit.Ignore;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 public class ForEachBlockTest {
 
   private String text = "Some text 4 more text.";
@@ -60,7 +59,7 @@ public class ForEachBlockTest {
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testPerformance() throws Exception {
 
     int lines = 10000;
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyFirstBlockTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyFirstBlockTest.java
index 72bd240b..00ca35bc 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyFirstBlockTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyFirstBlockTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.block;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +32,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OnlyFirstBlockTest {
 
@@ -61,13 +61,13 @@ public class OnlyFirstBlockTest {
 
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("some text", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("some text");
 
     t = RutaTestUtils.getTestType(cas, 2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(0, ai.size());
+    assertThat(ai.size()).isEqualTo(0);
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyOnceBlockTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyOnceBlockTest.java
index b44dfc57..0d1e6d21 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyOnceBlockTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/block/OnlyOnceBlockTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.block;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +32,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OnlyOnceBlockTest {
 
@@ -65,40 +65,40 @@ public class OnlyOnceBlockTest {
 
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("some", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("some");
 
     t = RutaTestUtils.getTestType(cas, 2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("1", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("1");
+
     t = RutaTestUtils.getTestType(cas, 3);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("some text with numbers", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("some text with numbers");
 
     t = RutaTestUtils.getTestType(cas, 4);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("1 2 3 4", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("1 2 3 4");
+
     t = RutaTestUtils.getTestType(cas, 5);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("some text with numbers", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("some text with numbers");
+
     t = RutaTestUtils.getTestType(cas, 6);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("some text with numbers: 1 2 3 4", iterator.next().getCoveredText());
-    
+    assertThat(iterator.next().getCoveredText()).isEqualTo("some text with numbers: 1 2 3 4");
+
     if (cas != null) {
       cas.release();
     }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
index cc2ae237..85b34d21 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
@@ -23,7 +23,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaScriptBlockTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/cache/RutaPatternCacheTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/cache/RutaPatternCacheTest.java
index eade57b9..1020e80c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/cache/RutaPatternCacheTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/cache/RutaPatternCacheTest.java
@@ -22,6 +22,7 @@ import static java.util.regex.Pattern.CASE_INSENSITIVE;
 import static java.util.regex.Pattern.DOTALL;
 import static java.util.regex.Pattern.MULTILINE;
 import static java.util.regex.Pattern.UNICODE_CASE;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -51,8 +52,7 @@ import org.apache.uima.ruta.seed.TextSeeder;
 import org.apache.uima.ruta.type.ANY;
 import org.apache.uima.ruta.type.RutaBasic;
 import org.apache.uima.ruta.visitor.InferenceCrowd;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaPatternCacheTest {
 
@@ -98,15 +98,15 @@ public class RutaPatternCacheTest {
     EvaluatedCondition eval2 = regexpCondition2.eval(matchContext, stream, inferenceCrowd);
     regexpRule.apply(stream, inferenceCrowd);
 
-    Assert.assertTrue(eval1.isValue());
-    Assert.assertTrue(eval2.isValue());
+    assertThat(eval1.isValue()).isTrue();
+    assertThat(eval2.isValue()).isTrue();
 
     Map<PatternCacheKey, Pattern> cache = RutaPatternCache.getCacheMap();
-    Assert.assertEquals(1, cache.size());
+    assertThat(cache).hasSize(1);
     Entry<PatternCacheKey, Pattern> entry = cache.entrySet().iterator().next();
-    Assert.assertEquals("A", entry.getKey().getPatternString());
-    Assert.assertEquals(0, entry.getKey().getFlags() & (CASE_INSENSITIVE | UNICODE_CASE));
-    Assert.assertEquals(MULTILINE | DOTALL, entry.getKey().getFlags() & (MULTILINE | DOTALL));
+    assertThat(entry.getKey().getPatternString()).isEqualTo("A");
+    assertThat(entry.getKey().getFlags() & (CASE_INSENSITIVE | UNICODE_CASE)).isEqualTo(0);
+    assertThat(entry.getKey().getFlags() & (MULTILINE | DOTALL)).isEqualTo(MULTILINE | DOTALL);
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/AfterTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/AfterTest.java
index 17686bce..b4a5318d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/AfterTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/AfterTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AfterTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/AndTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/AndTest.java
index 155507ce..114a8ee6 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/AndTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/AndTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AndTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/BeforeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/BeforeTest.java
index 838fcdf9..735407ba 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/BeforeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/BeforeTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class BeforeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
index cfa37f8e..c95f3bfb 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
@@ -25,7 +25,7 @@ import java.util.TreeMap;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ContainsTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContextCountTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContextCountTest.java
index ff845086..c910bb80 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContextCountTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContextCountTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.condition;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.FSIterator;
@@ -29,8 +29,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ContextCountTest {
 
@@ -45,12 +44,11 @@ public class ContextCountTest {
 
     Type t = RutaTestUtils.getTestType(cas, 3);
     AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     FSIterator<AnnotationFS> iterator = ai.iterator();
-    assertEquals(
-            "A single sentence." + "And here is another one."
-                    + "Testing the CONTEXTCOUNT condition of Ruta System.",
-            iterator.next().getCoveredText().replaceAll("[\n\r]", ""));
+    assertThat(iterator.next().getCoveredText().replaceAll("[\n\r]", ""))
+            .isEqualTo("A single sentence." + "And here is another one."
+                    + "Testing the CONTEXTCOUNT condition of Ruta System.");
 
     cas.release();
   }
@@ -58,8 +56,9 @@ public class ContextCountTest {
   @Test
   public void testIndex() throws Exception {
     JCas jcas = RutaTestUtils.getCAS("A B C a b c").getJCas();
-    Assert.assertTrue(Ruta.matches(jcas,
-            "INT index; CW{CONTEXTCOUNT(Document,index,index)} # @SW{CONTEXTCOUNT(Document,0,100,index)-> MARK(T1,1,3)};"));
+    assertThat(Ruta.matches(jcas,
+            "INT index; CW{CONTEXTCOUNT(Document,index,index)} # @SW{CONTEXTCOUNT(Document,0,100,index)-> MARK(T1,1,3)};"))
+                    .isTrue();
     RutaTestUtils.assertAnnotationsEquals(jcas.getCas(), 1, 3, "A B C a", "B C a b", "C a b c");
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java
index 4072807f..4e2dcdcd 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class CountTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/CurrentCountTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/CurrentCountTest.java
index b3e70cd8..c844fc50 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/CurrentCountTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/CurrentCountTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class CurrentCountTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/EndsWithTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/EndsWithTest.java
index 555163a1..268717f4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/EndsWithTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/EndsWithTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class EndsWithTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java
index 6014b241..f555395c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class FeatureTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/IfTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/IfTest.java
index 0b0b1ad3..fbc15ea7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/IfTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/IfTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class IfTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java
index d0dfbcbb..572fd2fe 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java
@@ -30,7 +30,7 @@ import org.apache.uima.ruta.FeatureMatch1Test;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ImplicitCondition1Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
index b5cd6a15..caacd3f8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
@@ -19,11 +19,12 @@
 
 package org.apache.uima.ruta.condition;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ImplicitCondition2Test {
 
@@ -60,8 +61,8 @@ public class ImplicitCondition2Test {
   public void testStringCompare() throws Exception {
     String document = "a b. a b.";
     CAS cas = RutaTestUtils.getCAS(document);
-    Assert.assertTrue(Ruta.matches(cas.getJCas(), "(w:W # W{W.ct==w.ct}){->T1};"));
-    Assert.assertTrue(Ruta.matches(cas.getJCas(), "STRING s1 = \"a\"; (w:W W{s1==w.ct}){->T2};"));
+    assertThat(Ruta.matches(cas.getJCas(), "(w:W # W{W.ct==w.ct}){->T1};")).isTrue();
+    assertThat(Ruta.matches(cas.getJCas(), "STRING s1 = \"a\"; (w:W W{s1==w.ct}){->T2};")).isTrue();
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "a b. a", "b. a b");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "a b", "a b");
   }
@@ -74,7 +75,7 @@ public class ImplicitCondition2Test {
     String rules = "STRING s2;\n";
     rules += "Document{s2 == \"\" -> T10};\n";
     rules += "Document{s2 == null -> T11};\n";
-    Assert.assertTrue(Ruta.matches(cas.getJCas(), rules));
+    assertThat(Ruta.matches(cas.getJCas(), rules)).isTrue();
 
     RutaTestUtils.assertAnnotationsEquals(cas, 10, 0);
     RutaTestUtils.assertAnnotationsEquals(cas, 11, 1, document);
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/InListTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/InListTest.java
index 8f49fde4..c76bb2b3 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/InListTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/InListTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class InListTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/IsTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/IsTest.java
index a8ffe84e..9716acd7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/IsTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/IsTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class IsTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/LastTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/LastTest.java
index 3e82eca2..08399bdc 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/LastTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/LastTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LastTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/MOfNTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/MOfNTest.java
index 4481b8f6..925bbc40 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/MOfNTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/MOfNTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MOfNTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java
index e09e2194..21bed684 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/MacroConditionTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class MacroConditionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/NearTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/NearTest.java
index 5b9f3bbe..6bca0a78 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/NearTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/NearTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class NearTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/NotTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/NotTest.java
index c2c233d5..406e365c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/NotTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/NotTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class NotTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/OrTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/OrTest.java
index f4ce6a4e..44cbddd9 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/OrTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/OrTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OrTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ParseTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ParseTest.java
index c0cb1e91..4149a256 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ParseTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ParseTest.java
@@ -29,7 +29,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ParseTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQ2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQ2Test.java
index d706c4c6..fc253fa1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQ2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQ2Test.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.condition;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Map;
 import java.util.TreeMap;
@@ -31,7 +31,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PartOfNEQ2Test {
 
@@ -42,7 +42,7 @@ public class PartOfNEQ2Test {
     script += "\"> 51%\" -> Leaf1;\n";
     script += "\"51%\" -> Leaf2;\n";
     script += "Base{PARTOFNEQ(Base) -> UNMARK(Base)};\n";
-    
+
     Map<String, String> complexTypes = new TreeMap<String, String>();
     String typeName1 = "uima.ruta.Base";
     complexTypes.put(typeName1, "uima.tcas.Annotation");
@@ -50,7 +50,7 @@ public class PartOfNEQ2Test {
     complexTypes.put(typeName2, typeName1);
     String typeName3 = "uima.ruta.Leaf2";
     complexTypes.put(typeName3, typeName1);
-    
+
     CAS cas = null;
     try {
       cas = RutaTestUtils.getCAS(document, complexTypes, null);
@@ -62,12 +62,12 @@ public class PartOfNEQ2Test {
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
     FSIterator<AnnotationFS> iterator = null;
-    
+
     t = cas.getTypeSystem().getType(typeName1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("> 51%", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("> 51%");
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQTest.java
index 0b521124..0eb23487 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfNEQTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PartOfNEQTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfTest.java
index 77fe622c..61821134 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PartOfTest.java
@@ -25,7 +25,7 @@ import java.util.TreeMap;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PartOfTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PositionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PositionTest.java
index 96b61347..1fa8012b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/PositionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/PositionTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PositionTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/RegExpTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/RegExpTest.java
index 4001ca08..6a1217db 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/RegExpTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/RegExpTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RegExpTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ScoreTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ScoreTest.java
index 8b8076f1..6d4a3fdf 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/ScoreTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/ScoreTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ScoreTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/SizeTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/SizeTest.java
index f0e35f90..f20a297b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/SizeTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/SizeTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SizeTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/StartsWithTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/StartsWithTest.java
index 4dc1cc7d..4a621c05 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/StartsWithTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/StartsWithTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class StartsWithTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/TotalCountTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/TotalCountTest.java
index 77600dba..388f252f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/TotalCountTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/TotalCountTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.condition;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TotalCountTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
index 7b0f049b..56f59671 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.condition;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class VoteTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java
index 7ff5a1b4..e2267ef1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.descriptor;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
@@ -38,9 +40,8 @@ import org.apache.uima.resource.metadata.TypeDescription;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.ruta.engine.HtmlAnnotator;
 import org.apache.uima.ruta.engine.RutaEngine;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 public class GenerateDescriptorTest {
 
@@ -48,7 +49,7 @@ public class GenerateDescriptorTest {
 
   private static URL basicTSUrl;
 
-  @BeforeClass
+  @BeforeAll
   public static void setUpClass() {
 
     GenerateDescriptorTest.basicAEUrl = GenerateDescriptorTest.class.getClassLoader()
@@ -89,24 +90,24 @@ public class GenerateDescriptorTest {
 
     String mainScript = (String) cps.getParameterValue(RutaEngine.PARAM_MAIN_SCRIPT);
     String rules = (String) cps.getParameterValue(RutaEngine.PARAM_RULES);
-    Assert.assertNull("mainScript param should be null", mainScript);
-    Assert.assertNotNull("rules param should not null", rules);
+    assertThat(mainScript).as("mainScript param should be null").isNull();
+    assertThat(rules).as("rules param should not null").isNotNull();
 
     String[] additionalEngines = (String[]) cps
             .getParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINES);
-    Assert.assertNotNull(additionalEngines);
-    Assert.assertEquals("org.apache.uima.ruta.engine.HtmlAnnotator", additionalEngines[0]);
+    assertThat(additionalEngines).isNotNull();
+    assertThat(additionalEngines[0]).isEqualTo("org.apache.uima.ruta.engine.HtmlAnnotator");
 
     String[] additionalUimafitEngines = (String[]) cps
             .getParameterValue(RutaEngine.PARAM_ADDITIONAL_UIMAFIT_ENGINES);
-    Assert.assertNotNull(additionalUimafitEngines);
-    Assert.assertEquals("org.apache.uima.ruta.engine.PlainTextAnnotator",
-            additionalUimafitEngines[0]);
+    assertThat(additionalUimafitEngines).isNotNull();
+    assertThat(additionalUimafitEngines[0])
+            .isEqualTo("org.apache.uima.ruta.engine.PlainTextAnnotator");
 
     String[] additionalScripts = (String[]) cps
             .getParameterValue(RutaEngine.PARAM_ADDITIONAL_SCRIPTS);
-    Assert.assertNotNull(additionalScripts);
-    Assert.assertEquals("org.apache.uiima.ruta.Additional", additionalScripts[0]);
+    assertThat(additionalScripts).isNotNull();
+    assertThat(additionalScripts[0]).isEqualTo("org.apache.uiima.ruta.Additional");
 
   }
 
@@ -135,47 +136,47 @@ public class GenerateDescriptorTest {
     tsd.resolveImports(rm);
 
     TypeDescription tagType = tsd.getType("org.apache.uima.ruta.type.html.TAG");
-    Assert.assertNotNull(tagType);
+    assertThat(tagType).isNotNull();
 
     TypeDescription simpleType = tsd.getType("test.package.Anonymous.SimpleType");
-    Assert.assertNotNull(simpleType);
-    Assert.assertEquals("uima.tcas.Annotation", simpleType.getSupertypeName());
+    assertThat(simpleType).isNotNull();
+    assertThat(simpleType.getSupertypeName()).isEqualTo("uima.tcas.Annotation");
 
     TypeDescription complexType = tsd.getType("test.package.Anonymous.ComplexType");
-    Assert.assertNotNull(complexType);
-    Assert.assertEquals("Type defined in test.package.Anonymous", complexType.getDescription());
-    Assert.assertEquals("test.package.Anonymous.SimpleType", complexType.getSupertypeName());
+    assertThat(complexType).isNotNull();
+    assertThat(complexType.getDescription()).isEqualTo("Type defined in test.package.Anonymous");
+    assertThat(complexType.getSupertypeName()).isEqualTo("test.package.Anonymous.SimpleType");
     FeatureDescription[] features = complexType.getFeatures();
     Map<String, String> featureMap = new HashMap<>();
     featureMap.put("fs", "test.package.Anonymous.SimpleType");
     featureMap.put("s", "uima.cas.String");
     featureMap.put("b", "uima.cas.Boolean");
     featureMap.put("i", "uima.cas.Integer");
-    Assert.assertEquals(4, features.length);
+    assertThat(features).hasSize(4);
     for (FeatureDescription each : features) {
       String f = featureMap.get(each.getName());
-      Assert.assertNotNull(f);
+      assertThat(f).isNotNull();
     }
 
     TypeDescription complexType2 = tsd.getType("test.package.Anonymous.ComplexType2");
-    Assert.assertNotNull(complexType2);
-    Assert.assertEquals("Type defined in test.package.Anonymous", complexType2.getDescription());
-    Assert.assertEquals("uima.tcas.Annotation", complexType2.getSupertypeName());
+    assertThat(complexType2).isNotNull();
+    assertThat(complexType2.getDescription()).isEqualTo("Type defined in test.package.Anonymous");
+    assertThat(complexType2.getSupertypeName()).isEqualTo("uima.tcas.Annotation");
     FeatureDescription[] features2 = complexType2.getFeatures();
     Map<String, String> featureMap2 = new HashMap<>();
     featureMap2.put("fs", "test.package.Anonymous.SimpleType");
     featureMap2.put("s", "uima.cas.String");
     featureMap2.put("b", "uima.cas.Boolean");
     featureMap2.put("i", "uima.cas.Integer");
-    Assert.assertEquals(4, features2.length);
+    assertThat(features2).hasSize(4);
     for (FeatureDescription each : features2) {
       String f = featureMap2.get(each.getName());
-      Assert.assertNotNull(f);
+      assertThat(f).isNotNull();
     }
 
     TypeDescription innerType = tsd.getType("test.package.Anonymous.sub.InnerType");
-    Assert.assertNotNull(innerType);
-    Assert.assertEquals("uima.tcas.Annotation", innerType.getSupertypeName());
+    assertThat(innerType).isNotNull();
+    assertThat(innerType.getSupertypeName()).isEqualTo("uima.tcas.Annotation");
 
   }
 
@@ -199,7 +200,7 @@ public class GenerateDescriptorTest {
     tsd.resolveImports(rm);
 
     TypeDescription tagType = tsd.getType("test.package.SimpleType");
-    Assert.assertNotNull(tagType);
+    assertThat(tagType).isNotNull();
 
   }
 
@@ -222,7 +223,7 @@ public class GenerateDescriptorTest {
     tsd.resolveImports(rm);
 
     TypeDescription tagType = tsd.getType("SimpleType");
-    Assert.assertNotNull(tagType);
+    assertThat(tagType).isNotNull();
 
   }
 
@@ -237,16 +238,17 @@ public class GenerateDescriptorTest {
     RutaBuildOptions options = new RutaBuildOptions();
     Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = rdf
             .createDescriptions(null, null, descriptorInformation, options, null, null, null);
-    Assert.assertNotNull("Typesystem does not contain declaredtype!",
-            descriptions.getValue().getType("Anonymous.Type"));
-    Assert.assertNotNull("AE typesystem does not contain declared type!", descriptions.getKey()
-            .getAnalysisEngineMetaData().getTypeSystem().getType("Anonymous.Type"));
+    assertThat(descriptions.getValue().getType("Anonymous.Type"))
+            .as("Typesystem does not contain declaredtype!").isNotNull();
+    assertThat(descriptions.getKey().getAnalysisEngineMetaData().getTypeSystem()
+            .getType("Anonymous.Type")).as("AE typesystem does not contain declared type!")
+                    .isNotNull();
     AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(descriptions.getKey());
     CAS cas = ae.newCAS();
     cas.setDocumentText("This is a test.");
     ae.process(cas);
     Type type = cas.getTypeSystem().getType("Anonymous.Type");
-    Assert.assertEquals(1, CasUtil.select(cas, type).size());
+    assertThat(CasUtil.select(cas, type)).hasSize(1);
     cas.release();
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/CascadedModifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/CascadedModifierTest.java
index 4bdbcde7..230c2df9 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/CascadedModifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/CascadedModifierTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.net.URL;
 
@@ -32,7 +32,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class CascadedModifierTest {
 
@@ -54,10 +54,10 @@ public class CascadedModifierTest {
     Type cwswType = cas.getTypeSystem().getType("Simple.CwSw");
     CAS lastCas = cas.getView("global3");
     AnnotationIndex<AnnotationFS> ai = lastCas.getAnnotationIndex(cwswType);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     FSIterator<AnnotationFS> iterator = ai.iterator();
     AnnotationFS a = iterator.next();
-    assertEquals("CW SW", a.getCoveredText());
+    assertThat(a.getCoveredText()).isEqualTo("CW SW");
 
     cas.release();
     ae.destroy();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/DifferentSeederTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/DifferentSeederTest.java
index 0b761e9f..c1908898 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/DifferentSeederTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/DifferentSeederTest.java
@@ -22,8 +22,7 @@ import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
 import org.apache.uima.jcas.JCas;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class DifferentSeederTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HandleDataPathTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HandleDataPathTest.java
index 5db77b99..ad13cd06 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HandleDataPathTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HandleDataPathTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -31,8 +33,7 @@ import org.apache.uima.fit.internal.ResourceManagerFactory.ResourceManagerCreato
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.impl.ResourceManager_impl;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class HandleDataPathTest {
 
@@ -46,16 +47,18 @@ public class HandleDataPathTest {
     assertDataPathEntries(true, new String[] { "datapath", "desc1", "desc2" });
   }
 
-  private void assertDataPathEntries(boolean modify, String[] expected) throws ResourceInitializationException {
+  private void assertDataPathEntries(boolean modify, String[] expected)
+          throws ResourceInitializationException {
     ResourceManagerCreator oldCreator = ResourceManagerFactory.getResourceManagerCreator();
     try {
       ResourceManagerFactory.setResourceManagerCreator(new ResourceManagerCreator() {
-  
+
         @Override
         public ResourceManager newResourceManager() throws ResourceInitializationException {
-  
+
           URL[] urls = new URL[1];
-          urls[0] = HandleDataPathTest.class.getResource("/org/apache/uima/ruta/CustomViewTest.ruta");
+          urls[0] = HandleDataPathTest.class
+                  .getResource("/org/apache/uima/ruta/CustomViewTest.ruta");
           ResourceManager resourceManager = new ResourceManager_impl(new URLClassLoader(urls));
           try {
             resourceManager.setDataPath("datapath");
@@ -70,16 +73,14 @@ public class HandleDataPathTest {
               new String[] { "desc1", "desc2" });
       String dataPath = ruta.getResourceManager().getDataPath();
       String[] paths = dataPath.split(Pattern.quote(File.pathSeparator));
-      Assert.assertEquals(expected.length, paths.length);
+      assertThat(paths).hasSameSizeAs(expected);
       for (int i = 0; i < expected.length; i++) {
         String e = expected[i];
         String dp = paths[i];
-        Assert.assertEquals(e, dp);
+        assertThat(dp).isEqualTo(e);
       }
-    }
-    finally {
+    } finally {
       ResourceManagerFactory.setResourceManagerCreator(oldCreator);
     }
   }
-
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlAnnotatorTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlAnnotatorTest.java
index 66ed0481..1105afbe 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlAnnotatorTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlAnnotatorTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 import java.net.URL;
@@ -34,7 +34,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class HtmlAnnotatorTest {
 
@@ -47,8 +47,8 @@ public class HtmlAnnotatorTest {
     String html = FileUtils.file2String(textFile, "UTF-8");
     URL url = HtmlAnnotator.class.getClassLoader().getResource("HtmlAnnotator.xml");
     if (url == null) {
-      url = HtmlAnnotator.class.getClassLoader().getResource(
-              "org/apache/uima/ruta/engine/HtmlAnnotator.xml");
+      url = HtmlAnnotator.class.getClassLoader()
+              .getResource("org/apache/uima/ruta/engine/HtmlAnnotator.xml");
     }
     XMLInputSource in = new XMLInputSource(url);
     ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in);
@@ -65,37 +65,36 @@ public class HtmlAnnotatorTest {
     ae.process(cas);
     ai = cas.getAnnotationIndex(tagType);
     iterator = ai.iterator();
-    assertEquals(7, ai.size());
+    assertThat(ai.size()).isEqualTo(7);
     AnnotationFS a = iterator.next();
-    assertEquals("HTML", a.getType().getShortName());
-    assertEquals(0, a.getBegin());
-    assertEquals(127, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("HTML");
+    assertThat(a.getBegin()).isEqualTo(0);
+    assertThat(a.getEnd()).isEqualTo(127);
     a = iterator.next();
-    assertEquals("HEAD", a.getType().getShortName());
-    assertEquals(8, a.getBegin());
-    assertEquals(39, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("HEAD");
+    assertThat(a.getBegin()).isEqualTo(8);
+    assertThat(a.getEnd()).isEqualTo(39);
     a = iterator.next();
-    assertEquals("REMARK", a.getType().getShortName());
-    assertEquals(16, a.getBegin());
-    assertEquals(30, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("REMARK");
+    assertThat(a.getBegin()).isEqualTo(16);
+    assertThat(a.getEnd()).isEqualTo(30);
     a = iterator.next();
-    assertEquals("BODY", a.getType().getShortName());
-    assertEquals(41, a.getBegin());
-    assertEquals(118, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("BODY");
+    assertThat(a.getBegin()).isEqualTo(41);
+    assertThat(a.getEnd()).isEqualTo(118);
     a = iterator.next();
-    assertEquals("BR", a.getType().getShortName());
-    assertEquals(64, a.getBegin());
-    assertEquals(69, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("BR");
+    assertThat(a.getBegin()).isEqualTo(64);
+    assertThat(a.getEnd()).isEqualTo(69);
     a = iterator.next();
-    assertEquals("B", a.getType().getShortName());
-    assertEquals(78, a.getBegin());
-    assertEquals(89, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("B");
+    assertThat(a.getBegin()).isEqualTo(78);
+    assertThat(a.getEnd()).isEqualTo(89);
     a = iterator.next();
-    assertEquals("BR", a.getType().getShortName());
-    assertEquals(91, a.getBegin());
-    assertEquals(96, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("BR");
+    assertThat(a.getBegin()).isEqualTo(91);
+    assertThat(a.getEnd()).isEqualTo(96);
 
-    
     ae.setConfigParameterValue("onlyContent", true);
     ae.reconfigure();
     cas.reset();
@@ -103,24 +102,24 @@ public class HtmlAnnotatorTest {
     ae.process(cas);
     ai = cas.getAnnotationIndex(tagType);
     iterator = ai.iterator();
-    assertEquals(4, ai.size());
+    assertThat(ai.size()).isEqualTo(4);
     a = iterator.next();
-    assertEquals("HTML", a.getType().getShortName());
-    assertEquals(6, a.getBegin());
-    assertEquals(120, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("HTML");
+    assertThat(a.getBegin()).isEqualTo(6);
+    assertThat(a.getEnd()).isEqualTo(120);
     a = iterator.next();
-    assertEquals("HEAD", a.getType().getShortName());
-    assertEquals(14, a.getBegin());
-    assertEquals(32, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("HEAD");
+    assertThat(a.getBegin()).isEqualTo(14);
+    assertThat(a.getEnd()).isEqualTo(32);
     a = iterator.next();
-    assertEquals("BODY", a.getType().getShortName());
-    assertEquals(47, a.getBegin());
-    assertEquals(111, a.getEnd());
+    assertThat(a.getType().getShortName()).isEqualTo("BODY");
+    assertThat(a.getBegin()).isEqualTo(47);
+    assertThat(a.getEnd()).isEqualTo(111);
     a = iterator.next();
-    assertEquals("B", a.getType().getShortName());
-    assertEquals(81, a.getBegin());
-    assertEquals(85, a.getEnd());
-    
+    assertThat(a.getType().getShortName()).isEqualTo("B");
+    assertThat(a.getBegin()).isEqualTo(81);
+    assertThat(a.getEnd()).isEqualTo(85);
+
     cas.release();
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterTest.java
index 538b26c2..6c8b2f08 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 import java.net.URL;
@@ -37,8 +37,8 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 public class HtmlConverterTest {
 
@@ -56,7 +56,7 @@ public class HtmlConverterTest {
 
   private String outputViewName = "raw_testing";
 
-  @BeforeClass
+  @BeforeAll
   public static void setUpClass() throws Exception {
     // get resource
     String namespace = HtmlConverterTest.class.getPackage().getName().replaceAll("\\.", "/");
@@ -120,10 +120,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal normal bold\nend of body 3&#8364;&#160;&auml;&ouml;&uuml;";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -155,10 +156,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal\u00A0normal bold\nend of body 3\u20AC\u00A0äöü";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -190,10 +192,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -225,10 +228,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -260,10 +264,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -296,10 +301,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -331,10 +337,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -373,13 +380,13 @@ public class HtmlConverterTest {
       CAS modifiedView = cas.getView(outputViewName);
       AnnotationIndex<AnnotationFS> ai = modifiedView.getAnnotationIndex(boldType);
       FSIterator<AnnotationFS> iterator = ai.iterator();
-      assertEquals(true, iterator.hasNext());
+      assertThat(iterator.hasNext()).isEqualTo(true);
       AnnotationFS next = iterator.next();
-      assertEquals("B", next.getType().getShortName());
-      assertEquals(21, next.getBegin());
-      assertEquals(25, next.getEnd());
-      assertEquals(next.getCoveredText(), "bold");
-      assertEquals(next.getCoveredText().length(), 4);
+      assertThat(next.getType().getShortName()).isEqualTo("B");
+      assertThat(next.getBegin()).isEqualTo(21);
+      assertThat(next.getEnd()).isEqualTo(25);
+      assertThat("bold").isEqualTo(next.getCoveredText());
+      assertThat(4).isEqualTo(next.getCoveredText().length());
 
       // fini
       cas.release();
@@ -427,28 +434,28 @@ public class HtmlConverterTest {
     // _____________________________ BB _________________________ BB ___________
     //
     CAS modifiedView = cas.getView(outputViewName);
-//    String modifiedText = modifiedView.getDocumentText();
-//    int modLength = modifiedText.length();
-//    int modLengthCodepoints = modifiedText.codePointCount(0, modLength);
+    // String modifiedText = modifiedView.getDocumentText();
+    // int modLength = modifiedText.length();
+    // int modLengthCodepoints = modifiedText.codePointCount(0, modLength);
     AnnotationIndex<AnnotationFS> ai = modifiedView.getAnnotationIndex(boldType);
     FSIterator<AnnotationFS> iterator = ai.iterator();
-    assertEquals(true, iterator.hasNext());
+    assertThat(iterator.hasNext()).isEqualTo(true);
     // check first bold annotation
     AnnotationFS next = iterator.next();
-    assertEquals("B", next.getType().getShortName());
-    assertEquals(28, next.getBegin());
-    assertEquals(32, next.getEnd());
-    assertEquals(next.getCoveredText(), "bold");
-    assertEquals(next.getCoveredText().length(), 4);
+    assertThat(next.getType().getShortName()).isEqualTo("B");
+    assertThat(next.getBegin()).isEqualTo(28);
+    assertThat(next.getEnd()).isEqualTo(32);
+    assertThat("bold").isEqualTo(next.getCoveredText());
+    assertThat(4).isEqualTo(next.getCoveredText().length());
     // check second bold annotation
     next = iterator.next();
     int begin = next.getBegin();
     int end = next.getEnd();
-    assertEquals("B", next.getType().getShortName());
-    assertEquals(56, begin); // map[279] == 56
-    assertEquals(60, end); // map[290] == 60
-    assertEquals(next.getCoveredText(), "bold");
-    assertEquals(next.getCoveredText().length(), 4);
+    assertThat(next.getType().getShortName()).isEqualTo("B");
+    assertThat(begin).isEqualTo(56); // map[279] == 56
+    assertThat(end).isEqualTo(60); // map[290] == 60
+    assertThat("bold").isEqualTo(next.getCoveredText());
+    assertThat(4).isEqualTo(next.getCoveredText().length());
 
     // fini
     cas.release();
@@ -485,10 +492,11 @@ public class HtmlConverterTest {
 
     String expectedText = "start of body\nnormal bold\nend of body";
     AnnotationFS documentAnnotation = modifiedView.getDocumentAnnotation();
-    assertEquals(String.format("begin of annotation is %d, %d expected.",
-            documentAnnotation.getBegin(), 0), documentAnnotation.getBegin(), 0);
-    assertEquals(documentAnnotation.getEnd(), text.length());
-    assertEquals(expectedText, text);
+    assertThat(documentAnnotation.getBegin())
+            .as("begin of annotation is %d, %d expected.", documentAnnotation.getBegin(), 0)
+            .isZero();
+    assertThat(text.length()).isEqualTo(documentAnnotation.getEnd());
+    assertThat(text).isEqualTo(expectedText);
 
     // fini
     cas.release();
@@ -520,7 +528,7 @@ public class HtmlConverterTest {
     String text = modifiedView.getDocumentText();
 
     String expectedText = "Hello world";
-    assertEquals(expectedText, text);
+    assertThat(text).isEqualTo(expectedText);
 
     cas.release();
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterXmlTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterXmlTest.java
index 83587a66..a6ae3acb 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterXmlTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/HtmlConverterXmlTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.net.URL;
 
@@ -33,7 +33,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class HtmlConverterXmlTest {
 
@@ -84,15 +84,15 @@ public class HtmlConverterXmlTest {
 
     CAS plainTextCas = cas.getView(HtmlConverter.DEFAULT_MODIFIED_VIEW);
 
-    assertEquals("$Some content$$More content.", plainTextCas.getDocumentText());
+    assertThat(plainTextCas.getDocumentText()).isEqualTo("$Some content$$More content.");
 
     ai = plainTextCas.getAnnotationIndex(tagType);
     iterator = ai.iterator();
-    assertEquals(4, ai.size());
-    assertEquals("$Some content$$More content.", iterator.next().getCoveredText());
-    assertEquals("$Some content", iterator.next().getCoveredText());
-    assertEquals("$", iterator.next().getCoveredText());
-    assertEquals("$More content.", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(4);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("$Some content$$More content.");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("$Some content");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("$");
+    assertThat(iterator.next().getCoveredText()).isEqualTo("$More content.");
 
     cas.release();
   }
@@ -143,29 +143,28 @@ public class HtmlConverterXmlTest {
 
     CAS plainTextCas = cas.getView(HtmlConverter.DEFAULT_MODIFIED_VIEW);
 
-    assertEquals("Some contentMore content.", plainTextCas.getDocumentText());
+    assertThat(plainTextCas.getDocumentText()).isEqualTo("Some contentMore content.");
 
     ai = plainTextCas.getAnnotationIndex(tagType);
     iterator = ai.iterator();
-    assertEquals(4, ai.size());
+    assertThat(ai.size()).isEqualTo(4);
     AnnotationFS next = null;
     next = iterator.next();
-    assertEquals(false, next.getBooleanValue(expandedFeature));
-    assertEquals("Some contentMore content.", next.getCoveredText());
+    assertThat(next.getBooleanValue(expandedFeature)).isEqualTo(false);
+    assertThat(next.getCoveredText()).isEqualTo("Some contentMore content.");
     next = iterator.next();
-    assertEquals(false, next.getBooleanValue(expandedFeature));
-    assertEquals("Some content", next.getCoveredText());
+    assertThat(next.getBooleanValue(expandedFeature)).isEqualTo(false);
+    assertThat(next.getCoveredText()).isEqualTo("Some content");
     next = iterator.next();
     boolean b1 = next.getBooleanValue(expandedFeature);
-    assertEquals("More content.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More content.");
     next = iterator.next();
     boolean b2 = next.getBooleanValue(expandedFeature);
-    assertEquals("More content.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("More content.");
     // for one of these two annotation (with same offsets) the feature must be set to true
-    assertEquals(true, b1 || b2);
+    assertThat(b1 || b2).isEqualTo(true);
 
     cas.release();
   }
 
-
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java
index 2cb8fc9f..33a6378a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
@@ -26,25 +28,24 @@ import org.apache.uima.jcas.JCas;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.ruta.type.ALL;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class MultipleSeedersTest {
 
   @Test
   public void test() throws ResourceInitializationException, AnalysisEngineProcessException {
-    
-    AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, 
-            RutaEngine.PARAM_RULES, "TokenSeed{-> TruePositive};",
-            RutaEngine.PARAM_SEEDERS, new String[] {DummySeeder.class.getName(),DummySeeder.class.getName()});
-    
+
+    AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES,
+            "TokenSeed{-> TruePositive};", RutaEngine.PARAM_SEEDERS,
+            new String[] { DummySeeder.class.getName(), DummySeeder.class.getName() });
+
     JCas jcas = ae.newJCas();
     jcas.setDocumentText("Dummy text.");
     ae.process(jcas);
-    
-    Assert.assertEquals(2, JCasUtil.select(jcas, TruePositive.class).size());
-    Assert.assertEquals(0, JCasUtil.select(jcas, ALL.class).size());
-    
+
+    assertThat(JCasUtil.select(jcas, TruePositive.class)).hasSize(2);
+    assertThat(JCasUtil.select(jcas, ALL.class)).hasSize(0);
+
   }
-  
+
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/NoSeedersTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/NoSeedersTest.java
index 3ec0e0fd..5043d506 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/NoSeedersTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/NoSeedersTest.java
@@ -22,8 +22,7 @@ import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
 import org.apache.uima.jcas.JCas;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class NoSeedersTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java
index 67206c26..1b9a9e5c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -26,12 +28,12 @@ import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.type.CW;
 import org.apache.uima.ruta.type.SW;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ParamVarTest {
 
   @Test
-  public void test() {
+  public void test() throws Exception {
     String document = "Some text.";
     String script = "";
     script += "BLOCK(First) Document{}{\n";
@@ -59,12 +61,8 @@ public class ParamVarTest {
     params.put(RutaEngine.PARAM_VAR_VALUES,
             new String[] { "Some", "text", "Some", "0", "true", SW.class.getName(), "CW" });
 
-    try {
-      cas = RutaTestUtils.getCAS(document);
-      Ruta.apply(cas, script, params);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+    cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script, params);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "text");
@@ -96,28 +94,28 @@ public class ParamVarTest {
     cas.release();
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
+  @Test
   public void testWithStrictImport() throws Exception {
-    String document = "Some text.";
-    String script = "";
-    script += "TYPE t1;";
-    script += "TYPE t2;";
-    script += "TYPELIST tl;";
-    script += "CW{ -> t1};";
-    script += "SW{ -> t2};";
-    script += "ANY{PARTOF(tl) -> T3};";
-    Map<String, Object> params = new HashMap<String, Object>();
-    params.put(RutaEngine.PARAM_STRICT_IMPORTS, true);
-    params.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "t1", "t2", "tl" });
-    params.put(RutaEngine.PARAM_VAR_VALUES, new String[] { "org.apache.uima.T1",
-        "org.apache.uima.T2", "org.apache.uima.T1,org.apache.uima.T2" });
+    var document = "Some text.";
+    var script = """
+            TYPE t1;
+            TYPE t2;
+            TYPELIST tl;
+            CW{ -> t1};
+            SW{ -> t2};
+            ANY{PARTOF(tl) -> T3};
+            """;
+
+    Map<String, Object> params = Map.of( //
+            RutaEngine.PARAM_STRICT_IMPORTS, true, //
+            RutaEngine.PARAM_VAR_NAMES, new String[] { "t1", "t2", "tl" }, //
+            RutaEngine.PARAM_VAR_VALUES, new String[] { "org.apache.uima.T1", "org.apache.uima.T2",
+                "org.apache.uima.T1,org.apache.uima.T2" });
 
     CAS cas = RutaTestUtils.getCAS(document);
-    Ruta.apply(cas, script, params);
 
-    RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "Some", "text");
-
-    cas.release();
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> Ruta.apply(cas, script, params));
   }
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/PlainTextAnnotatorTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/PlainTextAnnotatorTest.java
index 0c56a8f4..2c1e7bad 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/PlainTextAnnotatorTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/PlainTextAnnotatorTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 import java.net.URL;
@@ -32,7 +32,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class PlainTextAnnotatorTest {
 
@@ -45,8 +45,8 @@ public class PlainTextAnnotatorTest {
     String text = FileUtils.file2String(textFile, "UTF-8");
     URL url = PlainTextAnnotator.class.getClassLoader().getResource("PlainTextAnnotator.xml");
     if (url == null) {
-      url = HtmlAnnotator.class.getClassLoader().getResource(
-              "org/apache/uima/ruta/engine/PlainTextAnnotator.xml");
+      url = HtmlAnnotator.class.getClassLoader()
+              .getResource("org/apache/uima/ruta/engine/PlainTextAnnotator.xml");
     }
     XMLInputSource in = new XMLInputSource(url);
     ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in);
@@ -56,21 +56,21 @@ public class PlainTextAnnotatorTest {
 
     cas.setDocumentText(text);
     ae.process(cas);
-    
+
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("org.apache.uima.ruta.type.AnyLine"));
-    assertEquals(18, ai.size());
+    assertThat(ai.size()).isEqualTo(18);
 
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("org.apache.uima.ruta.type.Line"));
-    assertEquals(10, ai.size());
+    assertThat(ai.size()).isEqualTo(10);
 
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("org.apache.uima.ruta.type.EmptyLine"));
-    assertEquals(8, ai.size());
+    assertThat(ai.size()).isEqualTo(8);
 
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("org.apache.uima.ruta.type.WSLine"));
-    assertEquals(5, ai.size());
+    assertThat(ai.size()).isEqualTo(5);
 
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("org.apache.uima.ruta.type.Paragraph"));
-    assertEquals(4, ai.size());
+    assertThat(ai.size()).isEqualTo(4);
 
     ae.destroy();
     cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RecursiveConfigureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RecursiveConfigureTest.java
index 719b5f78..2118112e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RecursiveConfigureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RecursiveConfigureTest.java
@@ -21,13 +21,13 @@ package org.apache.uima.ruta.engine;
 
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class RecursiveConfigureTest {
 
   @Test
-  @Ignore
+  @Disabled
   public void test() throws Exception {
 
     AnalysisEngineDescription aed = AnalysisEngineFactory.createEngineDescriptionFromPath(
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ResourcesFromDataPathTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ResourcesFromDataPathTest.java
index 2c53dba1..5c1c4a07 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ResourcesFromDataPathTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ResourcesFromDataPathTest.java
@@ -30,8 +30,7 @@ import org.apache.uima.fit.internal.ResourceManagerFactory;
 import org.apache.uima.fit.internal.ResourceManagerFactory.ResourceManagerCreator;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ResourcesFromDataPathTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java
index 79e2d79c..166d4daf 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RulesParamTest {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaCutterTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaCutterTest.java
index 9566ba2c..4513818d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaCutterTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaCutterTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Collection;
 
 import org.apache.uima.analysis_engine.AnalysisEngine;
@@ -27,36 +29,34 @@ import org.apache.uima.fit.factory.JCasFactory;
 import org.apache.uima.fit.util.JCasUtil;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Assert;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 
 public class RutaCutterTest {
 
   @Test
   public void test() throws Exception {
-    
+
     JCas jcas = JCasFactory.createJCas();
-    AnalysisEngine cutter = AnalysisEngineFactory.createEngine(RutaCutter.class, RutaCutter.PARAM_KEEP, TruePositive.class.getName());
+    AnalysisEngine cutter = AnalysisEngineFactory.createEngine(RutaCutter.class,
+            RutaCutter.PARAM_KEEP, TruePositive.class.getName());
     jcas.setDocumentText("Some text.");
     Ruta.apply(jcas.getCas(), "SW{-> TruePositive};");
     cutter.process(jcas);
 
     Collection<TruePositive> select = JCasUtil.select(jcas, TruePositive.class);
-    Assert.assertEquals(1, select.size());
+    assertThat(select).hasSize(1);
     TruePositive truePositive = select.iterator().next();
-    Assert.assertEquals(5, truePositive.getBegin());
-    
+    assertThat(truePositive.getBegin()).isEqualTo(5);
+
     JCas cuttedView = jcas.getView("cutted");
-    Assert.assertEquals("text", cuttedView.getDocumentText());
+    assertThat(cuttedView.getDocumentText()).isEqualTo("text");
     select = JCasUtil.select(cuttedView, TruePositive.class);
-    Assert.assertEquals(1, select.size());
+    assertThat(select).hasSize(1);
     truePositive = select.iterator().next();
-    Assert.assertEquals(0, truePositive.getBegin());
-    
+    assertThat(truePositive.getBegin()).isEqualTo(0);
+
     jcas.release();
     cutter.destroy();
   }
 
-  
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java
index e6943442..ff0748a4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java
@@ -18,10 +18,11 @@
  */
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.lang3.NotImplementedException;
@@ -43,8 +44,7 @@ import org.apache.uima.ruta.TypeUsageInformation;
 import org.apache.uima.ruta.descriptor.RutaBuildOptions;
 import org.apache.uima.ruta.descriptor.RutaDescriptorFactory;
 import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaEngineTest {
 
@@ -70,14 +70,12 @@ public class RutaEngineTest {
             "typeUsageInformation", true);
 
     List<String> mentionedTypes = typeUsageInformation.getMentionedTypes();
-    Collections.sort(mentionedTypes);
-    Assert.assertEquals(
-            Arrays.asList("COMMA", "CW", "Document", "Document", "SW", "SW.ct", "TruePositive", "W",
-                    "W.begin", "WS", "org", "org.apache", "org.apache.uima", "org.apache.uima.ruta",
-                    "org.apache.uima.ruta.type", "org.apache.uima.ruta.type.BREAK",
-                    "org.apache.uima.ruta.type.FalseNegative", "org.apache.uima.ruta.type.MARKUP",
-                    "org.apache.uima.ruta.type.SPACE", "uima.tcas.DocumentAnnotation"),
-            mentionedTypes);
+    assertThat(mentionedTypes).containsExactlyInAnyOrder("COMMA", "CW", "Document", "Document",
+            "SW", "SW.ct", "TruePositive", "W", "W.begin", "WS", "org", "org.apache",
+            "org.apache.uima", "org.apache.uima.ruta", "org.apache.uima.ruta.type",
+            "org.apache.uima.ruta.type.BREAK", "org.apache.uima.ruta.type.FalseNegative",
+            "org.apache.uima.ruta.type.MARKUP", "org.apache.uima.ruta.type.SPACE",
+            "uima.tcas.DocumentAnnotation");
 
     CAS cas = RutaTestUtils.getCAS("This is a test.");
     JCas jcas = cas.getJCas();
@@ -85,38 +83,34 @@ public class RutaEngineTest {
 
     Collection<String> usedTypes = typeUsageInformation.getUsedTypes();
     List<String> usedTypesList = new ArrayList<>(usedTypes);
-    Collections.sort(usedTypesList);
-    Assert.assertEquals(Arrays.asList("org.apache.uima.ruta.type.BREAK",
+    assertThat(usedTypesList).containsExactlyInAnyOrder("org.apache.uima.ruta.type.BREAK",
             "org.apache.uima.ruta.type.COMMA", "org.apache.uima.ruta.type.CW",
             "org.apache.uima.ruta.type.FalseNegative", "org.apache.uima.ruta.type.MARKUP",
             "org.apache.uima.ruta.type.SPACE", "org.apache.uima.ruta.type.SW",
             "org.apache.uima.ruta.type.TruePositive", "org.apache.uima.ruta.type.W",
-            "org.apache.uima.ruta.type.WS", "uima.tcas.DocumentAnnotation"), usedTypesList);
-
+            "org.apache.uima.ruta.type.WS", "uima.tcas.DocumentAnnotation");
   }
 
-  @Test(expected = NotImplementedException.class)
+  @Test()
   public void testInferenceVisitors() throws Throwable {
 
     String document = "Some text.";
     String script = "CW;";
 
-    AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES,
-            script, RutaEngine.PARAM_INFERENCE_VISITORS,
-            new String[] { TestRutaInferenceVisitor.class.getName() });
+    AnalysisEngine ae = AnalysisEngineFactory.createEngine( //
+            RutaEngine.class, //
+            RutaEngine.PARAM_RULES, script, //
+            RutaEngine.PARAM_INFERENCE_VISITORS, TestRutaInferenceVisitor.class);
 
     CAS cas = RutaTestUtils.getCAS(document);
 
-    try {
-      ae.process(cas);
-    } catch (AnalysisEngineProcessException e) {
-      Throwable cause = e.getCause();
-      throw cause;
-    }
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> ae.process(cas)) //
+            .withCauseInstanceOf(NotImplementedException.class);
   }
 
   @Test
-  public void testMaxRuleMatches() throws Throwable {
+  public void testMaxRuleMatches() throws Exception {
 
     String document = "This is some text.";
     String script = "W;";
@@ -126,16 +120,10 @@ public class RutaEngineTest {
 
     CAS cas = RutaTestUtils.getCAS(document);
 
-    try {
-      ae.process(cas);
-    } catch (AnalysisEngineProcessException e) {
-      Throwable cause = e.getCause();
-      Assert.assertTrue(cause instanceof RutaProcessRuntimeException);
-      String message = cause.getMessage();
-      Assert.assertTrue(message.startsWith("Rule exceeded the allowed amount of matches"));
-      return;
-    }
-    Assert.fail("expected RutaProcessRuntimeException");
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> ae.process(cas))
+            .withCauseInstanceOf(RutaProcessRuntimeException.class).havingCause()
+            .withMessageStartingWith("Rule exceeded the allowed amount of matches");
   }
 
   @Test
@@ -149,16 +137,10 @@ public class RutaEngineTest {
 
     CAS cas = RutaTestUtils.getCAS(document);
 
-    try {
-      ae.process(cas);
-    } catch (AnalysisEngineProcessException e) {
-      Throwable cause = e.getCause();
-      Assert.assertTrue(cause instanceof RutaProcessRuntimeException);
-      String message = cause.getMessage();
-      Assert.assertTrue(message.startsWith("Rule element exceeded the allowed amount of matches"));
-      return;
-    }
-    Assert.fail("expected RutaProcessRuntimeException");
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> ae.process(cas))
+            .withCauseInstanceOf(RutaProcessRuntimeException.class).havingCause()
+            .withMessageStartingWith("Rule element exceeded the allowed amount of matches");
   }
 
   @Test
@@ -196,9 +178,9 @@ public class RutaEngineTest {
     ae.process(cas);
 
     Type type = cas.getTypeSystem().getType("MyType");
-    Assert.assertNotNull(type);
+    assertThat(type).isNotNull();
     Collection<AnnotationFS> select = CasUtil.select(cas, type);
-    Assert.assertEquals(3, select.size());
+    assertThat(select).hasSize(3);
 
   }
 
@@ -222,9 +204,9 @@ public class RutaEngineTest {
     ae.process(cas);
 
     Type type = cas.getTypeSystem().getType("pack.MyType");
-    Assert.assertNotNull(type);
+    assertThat(type).isNotNull();
     Collection<AnnotationFS> select = CasUtil.select(cas, type);
-    Assert.assertEquals(3, select.size());
+    assertThat(select).hasSize(3);
 
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaModifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaModifierTest.java
index 0c36ca9c..299c30a5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaModifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaModifierTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.net.URL;
 import java.util.ArrayList;
@@ -36,7 +36,7 @@ import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.ruta.seed.DefaultSeeder;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaModifierTest {
 
@@ -76,7 +76,7 @@ public class RutaModifierTest {
     CAS modifiedView = cas.getView(viewName);
     String text = modifiedView.getDocumentText();
 
-    assertEquals("start of bodynormal BOLDend of body", text);
+    assertThat(text).isEqualTo("start of bodynormal BOLDend of body");
 
     cas.release();
     ae.destroy();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java
index 6af0aada..d8a94c95 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.net.URL;
 import java.util.List;
@@ -42,8 +42,7 @@ import org.apache.uima.resource.metadata.impl.TypeDescription_impl;
 import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaTest {
 
@@ -68,20 +67,20 @@ public class RutaTest {
     FSIterator<AnnotationFS> iterator = null;
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("uima.ruta.T1"));
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("Some", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some");
 
     Ruta.apply(cas, "T1 SW{-> MARK(T2)};");
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("uima.ruta.T2"));
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("document", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("document");
 
     Ruta.apply(cas, "T1{-> MARK(T3,1,2,3)} T2 PERIOD;");
     ai = cas.getAnnotationIndex(cas.getTypeSystem().getType("uima.ruta.T3"));
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("Some document.", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some document.");
 
     cas.release();
   }
@@ -105,13 +104,13 @@ public class RutaTest {
 
     Type type1 = cas.getTypeSystem().getType(t1);
     AnnotationIndex<AnnotationFS> ai1 = cas.getAnnotationIndex(type1);
-    assertEquals(1, ai1.size());
-    assertEquals("some", ai1.iterator().get().getCoveredText());
+    assertThat(ai1.size()).isEqualTo(1);
+    assertThat(ai1.iterator().get().getCoveredText()).isEqualTo("some");
 
     Type type2 = cas.getTypeSystem().getType(t2);
     AnnotationIndex<AnnotationFS> ai2 = cas.getAnnotationIndex(type2);
-    assertEquals(1, ai2.size());
-    assertEquals("text", ai2.iterator().get().getCoveredText());
+    assertThat(ai2.size()).isEqualTo(1);
+    assertThat(ai2.iterator().get().getCoveredText()).isEqualTo("text");
   }
 
   @Test
@@ -135,17 +134,17 @@ public class RutaTest {
     CAS cas = RutaTestUtils.getCAS(document);
     JCas jcas = cas.getJCas();
     List<Annotation> select1 = Ruta.select(jcas, "W{REGEXP(\"t.*\")};");
-    Assert.assertEquals(1, select1.size());
-    Assert.assertEquals("text", select1.get(0).getCoveredText());
+    assertThat(select1).hasSize(1);
+    assertThat(select1.get(0).getCoveredText()).isEqualTo("text");
 
     List<Annotation> select2 = Ruta.select(jcas, "Document<-{ANY @PERIOD;};");
-    Assert.assertEquals(1, select2.size());
-    Assert.assertEquals("Some text.", select2.get(0).getCoveredText());
+    assertThat(select2).hasSize(1);
+    assertThat(select2.get(0).getCoveredText()).isEqualTo("Some text.");
 
     List<Annotation> select3 = Ruta.select(jcas, "ANY @ANY;");
-    Assert.assertEquals(2, select3.size());
-    Assert.assertEquals("Some text", select3.get(0).getCoveredText());
-    Assert.assertEquals("text.", select3.get(1).getCoveredText());
+    assertThat(select3).hasSize(2);
+    assertThat(select3.get(0).getCoveredText()).isEqualTo("Some text");
+    assertThat(select3.get(1).getCoveredText()).isEqualTo("text.");
   }
 
   @Test
@@ -156,19 +155,19 @@ public class RutaTest {
     cas.addFsToIndexes(t1);
     JCas jcas = cas.getJCas();
     List<Annotation> select1 = Ruta.select(jcas, Ruta.inject("W $;", t1));
-    Assert.assertEquals(1, select1.size());
-    Assert.assertEquals("Some text", select1.get(0).getCoveredText());
+    assertThat(select1).hasSize(1);
+    assertThat(select1.get(0).getCoveredText()).isEqualTo("Some text");
 
-//    List<Annotation> select2 = Ruta.select(jcas, Ruta.inject("W{W.begin == $.begin};", t1));
-//    Assert.assertEquals(1, select2.size());
-//    Assert.assertEquals("text", select2.get(0).getCoveredText());
+    // List<Annotation> select2 = Ruta.select(jcas, Ruta.inject("W{W.begin == $.begin};", t1));
+    // assertThat(select2).hasSize(1);
+    // assertThat(select2.get(0).getCoveredText()).isEqualTo("text");
   }
 
   @Test
   public void testMatches() throws Exception {
     JCas jcas = RutaTestUtils.getCAS("Some text.").getJCas();
-    Assert.assertTrue(Ruta.matches(jcas, "CW # @PERIOD;"));
-    Assert.assertTrue(Ruta.matches(jcas, "W{IS(CW)} \"text\";"));
+    assertThat(Ruta.matches(jcas, "CW # @PERIOD;")).isTrue();
+    assertThat(Ruta.matches(jcas, "W{IS(CW)} \"text\";")).isTrue();
   }
 
   @Test
@@ -178,9 +177,9 @@ public class RutaTest {
     Annotation t1 = (Annotation) cas.createAnnotation(RutaTestUtils.getTestType(cas, 1), 5, 9);
     cas.addFsToIndexes(t1);
     JCas jcas = cas.getJCas();
-    Assert.assertTrue(Ruta.matches(jcas, Ruta.inject("W $;", t1)));
-    Assert.assertTrue(
-            Ruta.matches(jcas, Ruta.inject("${REGEXP(\"te.*\"), PARTOF(SW)} PERIOD;", t1)));
+    assertThat(Ruta.matches(jcas, Ruta.inject("W $;", t1))).isTrue();
+    assertThat(Ruta.matches(jcas, Ruta.inject("${REGEXP(\"te.*\"), PARTOF(SW)} PERIOD;", t1)))
+            .isTrue();
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/StackedScriptsTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/StackedScriptsTest.java
index 9f59a5ce..57f2296d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/StackedScriptsTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/StackedScriptsTest.java
@@ -33,8 +33,7 @@ import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class StackedScriptsTest {
 
   private static final String DOC_TEXT = "This is a simple test.";
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java
index ab5bdd3d..ba2a0230 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.io.File;
 import java.nio.file.Paths;
 
@@ -36,8 +38,7 @@ import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.ruta.descriptor.RutaBuildOptions;
 import org.apache.uima.ruta.descriptor.RutaDescriptorFactory;
 import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ThreeStackedScriptsVariableResetTest {
 
@@ -81,7 +82,6 @@ public class ThreeStackedScriptsVariableResetTest {
     Feature feature = type.getFeatureByBaseName("value");
     FeatureStructure fs = CasUtil.selectSingle(cas, type);
     String stringValue = fs.getStringValue(feature);
-    Assert.assertNull(stringValue);
+    assertThat(stringValue).isNull();
   }
-
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaClassLoaderTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaClassLoaderTest.java
index e04bc945..eb6ec302 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaClassLoaderTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaClassLoaderTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.uima.ruta.engine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -34,8 +36,7 @@ import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.ruta.type.FalsePositive;
 import org.apache.uima.ruta.type.TruePositive;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class UimaClassLoaderTest {
 
@@ -48,13 +49,14 @@ public class UimaClassLoaderTest {
     ResourceManagerCreator oldCreator = ResourceManagerFactory.getResourceManagerCreator();
     try {
       ResourceManagerFactory.setResourceManagerCreator(new ResourceManagerCreator() {
-  
+
         @Override
         public ResourceManager newResourceManager() throws ResourceInitializationException {
           ResourceManager resourceManager = null;
           try {
             resourceManager = UIMAFramework.newDefaultResourceManager();
-            resourceManager.setExtensionClassPath(this.getClass().getClassLoader(), cpDir.getAbsolutePath(), true);
+            resourceManager.setExtensionClassPath(this.getClass().getClassLoader(),
+                    cpDir.getAbsolutePath(), true);
             resourceManager.setDataPath("datapath");
           } catch (MalformedURLException e) {
             throw new ResourceInitializationException(e);
@@ -62,7 +64,7 @@ public class UimaClassLoaderTest {
           return resourceManager;
         }
       });
-  
+
       AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class,
               RutaEngine.PARAM_MAIN_SCRIPT, "UimafitTest");
       JCas jcas = ae.newJCas();
@@ -70,13 +72,12 @@ public class UimaClassLoaderTest {
       new TruePositive(jcas, 0, 4).addToIndexes();
       ae.process(jcas);
       Collection<FalsePositive> select = JCasUtil.select(jcas, FalsePositive.class);
-      Assert.assertTrue(!select.isEmpty());
-    }
-    finally {
+      assertThat(select).isNotEmpty();
+    } finally {
       ResourceManagerFactory.setResourceManagerCreator(oldCreator);
     }
   }
-  
+
   @Test
   public void testResource() throws Exception {
     URL url = UimaClassLoaderTest.class
@@ -86,13 +87,14 @@ public class UimaClassLoaderTest {
     ResourceManagerCreator oldCreator = ResourceManagerFactory.getResourceManagerCreator();
     try {
       ResourceManagerFactory.setResourceManagerCreator(new ResourceManagerCreator() {
-  
+
         @Override
         public ResourceManager newResourceManager() throws ResourceInitializationException {
           ResourceManager resourceManager = null;
           try {
             resourceManager = UIMAFramework.newDefaultResourceManager();
-            resourceManager.setExtensionClassPath(this.getClass().getClassLoader(), cpDir.getAbsolutePath(), true);
+            resourceManager.setExtensionClassPath(this.getClass().getClassLoader(),
+                    cpDir.getAbsolutePath(), true);
             resourceManager.setDataPath("datapath");
           } catch (MalformedURLException e) {
             throw new ResourceInitializationException(e);
@@ -100,16 +102,16 @@ public class UimaClassLoaderTest {
           return resourceManager;
         }
       });
-  
+
       AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class,
-              RutaEngine.PARAM_RULES, "WORDLIST list1 = 'MarkFastTestList.txt';MARKFAST(FalsePositive, list1, false, 0, true);");
+              RutaEngine.PARAM_RULES,
+              "WORDLIST list1 = 'MarkFastTestList.txt';MARKFAST(FalsePositive, list1, false, 0, true);");
       JCas jcas = ae.newJCas();
       jcas.setDocumentText("1 0 0");
       ae.process(jcas);
       Collection<FalsePositive> select = JCasUtil.select(jcas, FalsePositive.class);
-      Assert.assertTrue(!select.isEmpty());
-    }
-    finally {
+      assertThat(!select.isEmpty()).isTrue();
+    } finally {
       ResourceManagerFactory.setResourceManagerCreator(oldCreator);
     }
   }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaFitAnalysisEngineWithManditoryParameterTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaFitAnalysisEngineWithManditoryParameterTest.java
index e69908c9..09cfb86a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaFitAnalysisEngineWithManditoryParameterTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimaFitAnalysisEngineWithManditoryParameterTest.java
@@ -28,8 +28,7 @@ import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.ruta.descriptor.RutaBuildOptions;
 import org.apache.uima.ruta.descriptor.RutaDescriptorFactory;
 import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class UimaFitAnalysisEngineWithManditoryParameterTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimafitTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimafitTest.java
index b1c15f3d..014ab8a0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimafitTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/UimafitTest.java
@@ -19,8 +19,7 @@
 package org.apache.uima.ruta.engine;
 
 import static org.apache.uima.fit.factory.AnalysisEngineFactory.createEngine;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -46,7 +45,7 @@ import org.apache.uima.ruta.descriptor.RutaDescriptorInformation;
 import org.apache.uima.ruta.type.FalsePositive;
 import org.apache.uima.ruta.type.TruePositive;
 import org.apache.uima.util.CasCreationUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class UimafitTest {
 
@@ -80,8 +79,8 @@ public class UimafitTest {
     // Test the result
     AnnotationIndex<Annotation> ai = jcas.getAnnotationIndex(FalsePositive.type);
     FSIterator<Annotation> iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals("This is a test.", iterator.next().getCoveredText());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText()).isEqualTo("This is a test.");
 
   }
 
@@ -110,10 +109,8 @@ public class UimafitTest {
     // Type type = cas.getTypeSystem().getType(RutaDescriptorFactory.ANONYMOUS + ".MyType");
     Type type = cas.getTypeSystem().getType("Anonymous" + ".MyType");
 
-    assertNotNull(type);
+    assertThat(type).isNotNull();
     AnnotationIndex<AnnotationFS> annotationIndex = cas.getAnnotationIndex(type);
-    assertEquals(4, annotationIndex.size());
-
+    assertThat(annotationIndex.size()).isEqualTo(4);
   }
-
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ViewWriterTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ViewWriterTest.java
index 2c6ccf94..ce86b412 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/ViewWriterTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/ViewWriterTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.engine;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -37,7 +37,7 @@ import org.apache.uima.resource.ResourceSpecifier;
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.util.FileUtils;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ViewWriterTest {
 
@@ -76,11 +76,11 @@ public class ViewWriterTest {
     FileInputStream stream = new FileInputStream(tempFile);
     XmiCasDeserializer.deserialize(stream, cas, true);
 
-    assertEquals("This is a new view.", cas.getDocumentText());
+    assertThat(cas.getDocumentText()).isEqualTo("This is a new view.");
     type = cas.getTypeSystem().getType(TEST_TYPE);
     AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(type);
     AnnotationFS next = ai.iterator().next();
-    assertEquals("is", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("is");
 
     if (cas != null) {
       cas.release();
@@ -149,12 +149,12 @@ public class ViewWriterTest {
     FileInputStream stream = new FileInputStream(xmiOutputFile);
     XmiCasDeserializer.deserialize(stream, cas, true);
 
-    assertEquals("This is a new view.", cas.getDocumentText());
+    assertThat(cas.getDocumentText()).isEqualTo("This is a new view.");
     type = cas.getTypeSystem().getType(TEST_TYPE);
     AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(type);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     AnnotationFS next = ai.iterator().next();
-    assertEquals("new", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("new");
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java
index 45f3e42f..33a1febc 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java
@@ -28,8 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class AnnotationTypeExpressionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/ConditionedAnnotationTypeExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/ConditionedAnnotationTypeExpressionTest.java
index cb46eedf..929de4ea 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/ConditionedAnnotationTypeExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/ConditionedAnnotationTypeExpressionTest.java
@@ -28,8 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ConditionedAnnotationTypeExpressionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/IndexedListExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/IndexedListExpressionTest.java
index 608ef7d4..5cf2aff6 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/IndexedListExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/IndexedListExpressionTest.java
@@ -22,13 +22,12 @@ package org.apache.uima.ruta.expression;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Ignore;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 public class IndexedListExpressionTest {
 
   @Test
-  @Ignore
+  @Disabled
   public void test() throws Exception{
     String document = "Some text.";
     String script = "";
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java
index 72bfbb87..1f5beeaa 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/NullExpressionTest.java
@@ -28,8 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class NullExpressionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java
index 485c6e4d..ea3c0160 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/VariableInitialValueTest.java
@@ -22,8 +22,8 @@ package org.apache.uima.ruta.expression;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class VariableInitialValueTest {
 
@@ -49,7 +49,7 @@ public class VariableInitialValueTest {
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testIntVariableAsInitialValueOfList() throws Exception {
     String document = "This is a test.";
 
@@ -67,7 +67,5 @@ public class VariableInitialValueTest {
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "This is a test.");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "This is a test.");
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 0);
-
   }
-
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationAddressExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationAddressExpressionTest.java
index 89a02ffe..90741be0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationAddressExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationAddressExpressionTest.java
@@ -19,8 +19,7 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -37,7 +36,7 @@ import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AnnotationAddressExpressionTest {
 
@@ -123,13 +122,13 @@ public class AnnotationAddressExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    assertEquals("Some text.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("Some text.");
     AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
-    assertNotNull("Feature value is null!", a);
-    assertEquals("text", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("text");
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
index 0d249442..87f7c844 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java
@@ -34,8 +34,7 @@ import org.apache.uima.jcas.cas.FSArray;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class AnnotationFeatureExpressionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
index 30c9255d..fc3612fa 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
@@ -19,6 +19,9 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -41,9 +44,8 @@ import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class AnnotationLabelExpressionTest {
 
@@ -74,13 +76,13 @@ public class AnnotationLabelExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     AnnotationFS next = iterator.next();
-    Assert.assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
   }
 
   @Test
@@ -141,7 +143,7 @@ public class AnnotationLabelExpressionTest {
 
     t = cas.getTypeSystem().getType(typeName);
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
 
     AnnotationFS a = null;
@@ -149,27 +151,27 @@ public class AnnotationLabelExpressionTest {
     Feature f = null;
 
     next = iterator.next();
-    Assert.assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
 
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
 
     f = t.getFeatureByBaseName("b");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("text", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("text");
 
     f = t.getFeatureByBaseName("c");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals(".", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo(".");
 
     f = t.getFeatureByBaseName("d");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some text.", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some text.");
 
   }
 
@@ -192,41 +194,41 @@ public class AnnotationLabelExpressionTest {
 
     t = cas.getTypeSystem().getType("Struct1");
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     next = iterator.next();
-    Assert.assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
 
     t = cas.getTypeSystem().getType("Struct2");
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     next = iterator.next();
-    Assert.assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
 
     t = cas.getTypeSystem().getType("Struct3");
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     next = iterator.next();
-    Assert.assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
 
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testInsideOut() throws Exception {
 
     String document = "Some text.";
@@ -270,25 +272,25 @@ public class AnnotationLabelExpressionTest {
 
     t = cas.getTypeSystem().getType("Struct1");
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     next = iterator.next();
-    Assert.assertEquals("Some text.", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("Some text.");
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("text", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("text");
 
     t = cas.getTypeSystem().getType("Struct2");
     ai = cas.getAnnotationIndex(t);
-    Assert.assertEquals(1, ai.size());
+    assertThat(ai).hasSize(1);
     iterator = ai.iterator();
     next = iterator.next();
-    Assert.assertEquals(".", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo(".");
     f = t.getFeatureByBaseName("a");
     a = (AnnotationFS) next.getFeatureValue(f);
-    Assert.assertNotNull("Feature value is null!", a);
-    Assert.assertEquals("Some text.", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some text.");
 
   }
 
@@ -296,7 +298,7 @@ public class AnnotationLabelExpressionTest {
   public void testFeature() throws Exception {
 
     CAS cas = RutaTestUtils.getCAS("Some text.");
-    Assert.assertTrue(Ruta.matches(cas.getJCas(), "a:W b:W{a.end == (b.begin-1)-> T1};"));
+    assertThat(Ruta.matches(cas.getJCas(), "a:W b:W{a.end == (b.begin-1)-> T1};")).isTrue();
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "text");
   }
 
@@ -305,22 +307,24 @@ public class AnnotationLabelExpressionTest {
 
     String script = "a:W W{-> CREATE(Struct1, \"a\"=a)};";
     CAS cas = this.applyOnStruct4Cas(script);
-    Assert.assertTrue(Ruta.matches(cas.getJCas(), "a:Struct1{a.a.begin == 0 -> T1};"));
+    assertThat(Ruta.matches(cas.getJCas(), "a:Struct1{a.a.begin == 0 -> T1};")).isTrue();
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "text");
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
+  @Test
   public void testWrongFeature() throws Exception {
 
     CAS cas = RutaTestUtils.getCAS("Some text.");
-    Ruta.matches(cas.getJCas(), "a:W b:W{a.x == (b.y-1)-> T1};");
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> Ruta.matches(cas.getJCas(), "a:W b:W{a.x == (b.y-1)-> T1};"));
   }
 
   @Test
   public void testSequentialLabelSelfMatch() throws Exception {
 
     CAS cas = RutaTestUtils.getCAS("Some text.");
-    Assert.assertFalse(Ruta.matches(cas.getJCas(), "e:CW e;"));
+    assertThat(Ruta.matches(cas.getJCas(), "e:CW e;")).isFalse();
   }
 
   @Test
@@ -387,11 +391,11 @@ public class AnnotationLabelExpressionTest {
     Type type2 = cas.getTypeSystem().getType("Struct2");
     Feature feature2 = type2.getFeatureByBaseName("a");
     Collection<AnnotationFS> select = CasUtil.select(cas, type2);
-    Assert.assertEquals(3, select.size());
+    assertThat(select).hasSize(3);
     Iterator<AnnotationFS> iterator = select.iterator();
-    Assert.assertEquals("1", iterator.next().getFeatureValue(feature2).getStringValue(feature1));
-    Assert.assertEquals("2", iterator.next().getFeatureValue(feature2).getStringValue(feature1));
-    Assert.assertEquals("3", iterator.next().getFeatureValue(feature2).getStringValue(feature1));
+    assertThat(iterator.next().getFeatureValue(feature2).getStringValue(feature1)).isEqualTo("1");
+    assertThat(iterator.next().getFeatureValue(feature2).getStringValue(feature1)).isEqualTo("2");
+    assertThat(iterator.next().getFeatureValue(feature2).getStringValue(feature1)).isEqualTo("3");
     cas.release();
   }
 
@@ -447,66 +451,66 @@ public class AnnotationLabelExpressionTest {
     featureA = type.getFeatureByBaseName("a");
     featureAS = type.getFeatureByBaseName("as");
     iterator = CasUtil.select(cas, type).iterator();
-    Assert.assertTrue(iterator.hasNext());
+    assertThat(iterator.hasNext()).isTrue();
     next = iterator.next();
-    Assert.assertFalse(iterator.hasNext());
+    assertThat(iterator.hasNext()).isFalse();
     featureValueA = next.getFeatureValue(featureA);
     featureValueAS = next.getFeatureValue(featureAS);
-    Assert.assertNotNull(featureValueA);
-    Assert.assertNotNull(featureValueAS);
-    Assert.assertTrue(featureValueA instanceof Annotation);
-    Assert.assertTrue(featureValueAS instanceof FSArray);
+    assertThat(featureValueA).isNotNull();
+    assertThat(featureValueAS).isNotNull();
+    assertThat(featureValueA instanceof Annotation).isTrue();
+    assertThat(featureValueAS instanceof FSArray).isTrue();
     a = (Annotation) featureValueA;
     as = (FSArray<?>) featureValueAS;
-    Assert.assertEquals("Some text", a.getCoveredText());
-    Assert.assertEquals("Annotation", a.getType().getShortName());
-    Assert.assertEquals(1, as.size());
-    Assert.assertEquals("Some text", ((AnnotationFS) as.get(0)).getCoveredText());
-    Assert.assertEquals("Annotation", as.get(0).getType().getShortName());
+    assertThat(a.getCoveredText()).isEqualTo("Some text");
+    assertThat(a.getType().getShortName()).isEqualTo("Annotation");
+    assertThat(as).hasSize(1);
+    assertThat(((AnnotationFS) as.get(0)).getCoveredText()).isEqualTo("Some text");
+    assertThat(as.get(0).getType().getShortName()).isEqualTo("Annotation");
 
     type = cas.getTypeSystem().getType("Struct2");
     featureA = type.getFeatureByBaseName("a");
     featureAS = type.getFeatureByBaseName("as");
     iterator = CasUtil.select(cas, type).iterator();
-    Assert.assertTrue(iterator.hasNext());
+    assertThat(iterator.hasNext()).isTrue();
     next = iterator.next();
-    Assert.assertFalse(iterator.hasNext());
+    assertThat(iterator.hasNext()).isFalse();
     featureValueA = next.getFeatureValue(featureA);
     featureValueAS = next.getFeatureValue(featureAS);
-    Assert.assertNotNull(featureValueA);
-    Assert.assertNotNull(featureValueAS);
-    Assert.assertTrue(featureValueA instanceof Annotation);
-    Assert.assertTrue(featureValueAS instanceof FSArray);
+    assertThat(featureValueA).isNotNull();
+    assertThat(featureValueAS).isNotNull();
+    assertThat(featureValueA instanceof Annotation).isTrue();
+    assertThat(featureValueAS instanceof FSArray).isTrue();
     a = (Annotation) featureValueA;
     as = (FSArray<?>) featureValueAS;
-    Assert.assertEquals("Some", a.getCoveredText());
-    Assert.assertEquals("CW", a.getType().getShortName());
-    Assert.assertEquals(2, as.size());
-    Assert.assertEquals("text", ((AnnotationFS) as.get(0)).getCoveredText());
-    Assert.assertEquals("Some", ((AnnotationFS) as.get(1)).getCoveredText());
-    Assert.assertEquals("SW", as.get(0).getType().getShortName());
-    Assert.assertEquals("CW", as.get(1).getType().getShortName());
+    assertThat(a.getCoveredText()).isEqualTo("Some");
+    assertThat(a.getType().getShortName()).isEqualTo("CW");
+    assertThat(as).hasSize(2);
+    assertThat(((AnnotationFS) as.get(0)).getCoveredText()).isEqualTo("text");
+    assertThat(((AnnotationFS) as.get(1)).getCoveredText()).isEqualTo("Some");
+    assertThat(as.get(0).getType().getShortName()).isEqualTo("SW");
+    assertThat(as.get(1).getType().getShortName()).isEqualTo("CW");
 
     type = cas.getTypeSystem().getType("Struct3");
     featureA = type.getFeatureByBaseName("a");
     featureAS = type.getFeatureByBaseName("as");
     iterator = CasUtil.select(cas, type).iterator();
-    Assert.assertTrue(iterator.hasNext());
+    assertThat(iterator.hasNext()).isTrue();
     next = iterator.next();
-    Assert.assertFalse(iterator.hasNext());
+    assertThat(iterator.hasNext()).isFalse();
     featureValueA = next.getFeatureValue(featureA);
     featureValueAS = next.getFeatureValue(featureAS);
-    Assert.assertNotNull(featureValueA);
-    Assert.assertNotNull(featureValueAS);
-    Assert.assertTrue(featureValueA instanceof Annotation);
-    Assert.assertTrue(featureValueAS instanceof FSArray);
+    assertThat(featureValueA).isNotNull();
+    assertThat(featureValueAS).isNotNull();
+    assertThat(featureValueA instanceof Annotation).isTrue();
+    assertThat(featureValueAS instanceof FSArray).isTrue();
     a = (Annotation) featureValueA;
     as = (FSArray<?>) featureValueAS;
-    Assert.assertEquals("Some text", a.getCoveredText());
-    Assert.assertEquals("Annotation", a.getType().getShortName());
-    Assert.assertEquals(1, as.size());
-    Assert.assertEquals("Some text", ((AnnotationFS) as.get(0)).getCoveredText());
-    Assert.assertEquals("Annotation", as.get(0).getType().getShortName());
+    assertThat(a.getCoveredText()).isEqualTo("Some text");
+    assertThat(a.getType().getShortName()).isEqualTo("Annotation");
+    assertThat(as).hasSize(1);
+    assertThat(((AnnotationFS) as.get(0)).getCoveredText()).isEqualTo("Some text");
+    assertThat(as.get(0).getType().getShortName()).isEqualTo("Annotation");
 
     cas.release();
   }
@@ -524,43 +528,46 @@ public class AnnotationLabelExpressionTest {
     Feature feature1 = type1.getFeatureByBaseName("a");
 
     List<AnnotationFS> select1 = new ArrayList<>(CasUtil.select(cas, type1));
-    Assert.assertEquals(2, select1.size());
+    assertThat(select1).hasSize(2);
 
     AnnotationFS a11 = select1.get(0);
-    Assert.assertEquals("Some", a11.getCoveredText());
+    assertThat(a11.getCoveredText()).isEqualTo("Some");
     AnnotationFS featureValue11 = (AnnotationFS) a11.getFeatureValue(feature1);
-    Assert.assertEquals("text", featureValue11.getCoveredText());
+    assertThat(featureValue11.getCoveredText()).isEqualTo("text");
 
     AnnotationFS a21 = select1.get(1);
-    Assert.assertEquals("text", a21.getCoveredText());
+    assertThat(a21.getCoveredText()).isEqualTo("text");
     AnnotationFS featureValue21 = (AnnotationFS) a21.getFeatureValue(feature1);
-    Assert.assertNull(featureValue21);
+    assertThat(featureValue21).isNull();
 
     Type type2 = cas.getTypeSystem().getType("Struct2");
     Feature feature2 = type2.getFeatureByBaseName("a");
 
     List<AnnotationFS> select2 = new ArrayList<>(CasUtil.select(cas, type2));
-    Assert.assertEquals(2, select2.size());
+    assertThat(select2).hasSize(2);
 
     AnnotationFS a12 = select2.get(0);
-    Assert.assertEquals("Some", a12.getCoveredText());
+    assertThat(a12.getCoveredText()).isEqualTo("Some");
     AnnotationFS featureValue12 = (AnnotationFS) a12.getFeatureValue(feature2);
-    Assert.assertEquals("text.", featureValue12.getCoveredText());
+    assertThat(featureValue12.getCoveredText()).isEqualTo("text.");
 
     AnnotationFS a22 = select2.get(1);
-    Assert.assertEquals("text", a22.getCoveredText());
+    assertThat(a22.getCoveredText()).isEqualTo("text");
     AnnotationFS featureValue22 = (AnnotationFS) a22.getFeatureValue(feature2);
-    Assert.assertNull(featureValue22);
+    assertThat(featureValue22).isNull();
 
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
+  @Test
   public void testInvalidLabelWithQuantifier1() throws Exception {
 
-    String script = "";
-    script += "w:ANY{->Struct1, Struct1.a = w};";
-    script += "s1:Struct1{PARTOF(CW)->T1} s2:Struct1*{s2.a.ct == \"text\"};";
-    this.applyOnStruct4Cas(script);
+    String script = """
+            w:ANY{->Struct1, Struct1.a = w};
+            s1:Struct1{PARTOF(CW)->T1} s2:Struct1*{s2.a.ct == \"text\"};
+            """;
+
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> this.applyOnStruct4Cas(script));
   }
 
   @Test
@@ -718,11 +725,11 @@ public class AnnotationLabelExpressionTest {
     script += "ps:T3{-> ps.end = a.end} a:ANY+{-PARTOF(T3)};\n";
     script += "a:ANY+{-PARTOF(T4)} ps:@T4{-> ps.begin = a.begin};\n";
 
-//    script += "ps:T5{-> ps.end = a.end} a:ANY?{-PARTOF(T5)};\n";
-//    script += "a:ANY?{-PARTOF(T6)} ps:@T6{-> ps.begin = a.begin};\n";
+    // script += "ps:T5{-> ps.end = a.end} a:ANY?{-PARTOF(T5)};\n";
+    // script += "a:ANY?{-PARTOF(T6)} ps:@T6{-> ps.begin = a.begin};\n";
 
-//    script += "ps:T7{-> ps.end = a.end} a:ANY*?{-PARTOF(T7)};\n";
-//    script += "a:ANY*?{-PARTOF(T8)} ps:@T8{-> ps.begin = a.begin};\n";
+    // script += "ps:T7{-> ps.end = a.end} a:ANY*?{-PARTOF(T7)};\n";
+    // script += "a:ANY*?{-PARTOF(T8)} ps:@T8{-> ps.begin = a.begin};\n";
 
     CAS cas = RutaTestUtils.getCAS(document);
     Ruta.apply(cas, script);
@@ -733,11 +740,11 @@ public class AnnotationLabelExpressionTest {
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "1 a a", "1 a a", "1 a");
     RutaTestUtils.assertAnnotationsEquals(cas, 4, 3, "a 1", "a a 1", "a a 1");
 
-//    RutaTestUtils.assertAnnotationsEquals(cas, 5, 6, "a 1", "a", "a 1", "a", "a 1", "a");
-//    RutaTestUtils.assertAnnotationsEquals(cas, 6, 6, "a", "1 a", "a", "1 a", "a", "1 a");
+    // RutaTestUtils.assertAnnotationsEquals(cas, 5, 6, "a 1", "a", "a 1", "a", "a 1", "a");
+    // RutaTestUtils.assertAnnotationsEquals(cas, 6, 6, "a", "1 a", "a", "1 a", "a", "1 a");
 
-//    RutaTestUtils.assertAnnotationsEquals(cas, 7, 3, "1 a a", "1 a a", "1 a");
-//    RutaTestUtils.assertAnnotationsEquals(cas, 8, 3, "a 1", "a a 1", "a a 1");
+    // RutaTestUtils.assertAnnotationsEquals(cas, 7, 3, "1 a a", "1 a a", "1 a");
+    // RutaTestUtils.assertAnnotationsEquals(cas, 8, 3, "a 1", "a a 1", "a a 1");
   }
 
   @Test
@@ -833,7 +840,7 @@ public class AnnotationLabelExpressionTest {
   }
 
   @Test
-  @Ignore
+  @Disabled
   public void testInlineWithQuantifier() throws Exception {
 
     String script = "";
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
index 34da8e58..0564c43e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
@@ -19,8 +19,8 @@
 
 package org.apache.uima.ruta.expression.annotation;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -41,7 +41,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class AnnotationVariableExpressionTest {
 
@@ -68,8 +68,6 @@ public class AnnotationVariableExpressionTest {
 
     Type t = null;
     AnnotationIndex<AnnotationFS> ai = null;
-    FSIterator<AnnotationFS> iterator = null;
-    AnnotationFS next = null;
 
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
 
@@ -77,13 +75,10 @@ public class AnnotationVariableExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(1, ai.size());
-    iterator = ai.iterator();
-    next = iterator.next();
-    assertEquals("text", next.getCoveredText());
-    AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
-    assertNotNull("Feature value is null!", a);
-    assertEquals("Some", a.getCoveredText());
+    assertThat(ai)
+            .extracting(AnnotationFS::getCoveredText,
+                    a -> ((AnnotationFS) a.getFeatureValue(f1)).getCoveredText())
+            .containsExactly(tuple("text", "Some"));
   }
 
   @Test
@@ -118,13 +113,13 @@ public class AnnotationVariableExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
-    assertNotNull("Feature value is null!", a);
-    assertEquals("Some", a.getCoveredText());
+    assertThat(a).as("Feature value is null!").isNotNull();
+    assertThat(a.getCoveredText()).isEqualTo("Some");
   }
 
   @Test
@@ -159,13 +154,13 @@ public class AnnotationVariableExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     FSArray<?> array = (FSArray<?>) next.getFeatureValue(f1);
-    assertNotNull("Feature value is null!", array);
-    assertEquals(2, array.size());
+    assertThat(array).as("Feature value is null!").isNotNull();
+    assertThat(array.size()).isEqualTo(2);
   }
 
   @Test
@@ -200,13 +195,13 @@ public class AnnotationVariableExpressionTest {
     Feature f1 = t.getFeatureByBaseName(fn);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
     next = iterator.next();
-    assertEquals("text", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("text");
     FSArray<?> array = (FSArray<?>) next.getFeatureValue(f1);
-    assertNotNull("Feature value is null!", array);
-    assertEquals(2, array.size());
+    assertThat(array).as("Feature value is null!").isNotNull();
+    assertThat(array.size()).isEqualTo(2);
   }
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/feature/FeatureStructureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/feature/FeatureStructureTest.java
index cf6164ee..59eb40a4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/feature/FeatureStructureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/feature/FeatureStructureTest.java
@@ -34,8 +34,7 @@ import org.apache.uima.jcas.cas.FSArray;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class FeatureStructureTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/ComposedNumberExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/ComposedNumberExpressionTest.java
index e7a54b2f..7c8f79e4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/ComposedNumberExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/ComposedNumberExpressionTest.java
@@ -18,12 +18,12 @@
  */
 package org.apache.uima.ruta.expression.number;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Assert;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 
 public class ComposedNumberExpressionTest {
 
@@ -33,7 +33,7 @@ public class ComposedNumberExpressionTest {
     list.add(new SimpleNumberExpression(Integer.valueOf(1)));
     ComposedNumberExpression expr = new ComposedNumberExpression(list, new ArrayList<String>());
     String string = expr.getStringValue(null, null);
-    Assert.assertEquals("1", string);
+    assertThat(string).isEqualTo("1");
   }
-  
+
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/FloatVariableExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/FloatVariableExpressionTest.java
index 27df260a..b0d3be0a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/FloatVariableExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/number/FloatVariableExpressionTest.java
@@ -27,8 +27,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class FloatVariableExpressionTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordListStringExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordListStringExpressionTest.java
index 9c17cde7..4763e585 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordListStringExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordListStringExpressionTest.java
@@ -32,7 +32,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.util.InvalidXMLException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.xml.sax.SAXException;
 
 public class WordListStringExpressionTest {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java
index 5e8a35b3..e0d79699 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.expression.resource;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class WordTableStringExpressionTest {
 
@@ -78,26 +78,26 @@ public class WordTableStringExpressionTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     cas.release();
 
@@ -142,26 +142,26 @@ public class WordTableStringExpressionTest {
     Feature f2 = t.getFeatureByBaseName(fn2);
     ai = cas.getAnnotationIndex(t);
 
-    assertEquals(3, ai.size());
+    assertThat(ai.size()).isEqualTo(3);
     iterator = ai.iterator();
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Peter", v1);
-    assertEquals("Ruta", v2);
+    assertThat(v1).isEqualTo("Peter");
+    assertThat(v2).isEqualTo("Ruta");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Marshall", v1);
-    assertEquals("UIMA", v2);
+    assertThat(v1).isEqualTo("Marshall");
+    assertThat(v2).isEqualTo("UIMA");
 
     next = iterator.next();
     v1 = next.getStringValue(f1);
     v2 = next.getStringValue(f2);
-    assertEquals("Joern", v1);
-    assertEquals("CAS Editor", v2);
+    assertThat(v1).isEqualTo("Joern");
+    assertThat(v2).isEqualTo("CAS Editor");
 
     cas.release();
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringFeatureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringFeatureTest.java
index 9b5fb970..98c3a979 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringFeatureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringFeatureTest.java
@@ -27,7 +27,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class StringFeatureTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java
index eec5e6f0..9ffe22f7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.uima.ruta.expression.string;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -38,8 +41,7 @@ import org.apache.uima.ruta.type.FalseNegative;
 import org.apache.uima.ruta.type.FalsePositive;
 import org.apache.uima.ruta.type.TruePositive;
 import org.apache.uima.util.CasCreationUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class StringSubtypeAllowedValuesTest {
 
@@ -60,20 +62,21 @@ public class StringSubtypeAllowedValuesTest {
     Ruta.apply(cas, script);
 
     JCas jcas = cas.getJCas();
-    Assert.assertEquals(4, JCasUtil.select(jcas, TruePositive.class).size());
-    Assert.assertEquals(0, JCasUtil.select(jcas, FalseNegative.class).size());
-    Assert.assertEquals(0, JCasUtil.select(jcas, FalsePositive.class).size());
+    assertThat(JCasUtil.select(jcas, TruePositive.class)).hasSize(4);
+    assertThat(JCasUtil.select(jcas, FalseNegative.class)).hasSize(0);
+    assertThat(JCasUtil.select(jcas, FalsePositive.class)).hasSize(0);
 
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
+  @Test
   public void testInvalidValue() throws Exception {
 
     CAS cas = createCAS();
 
     String script = "Document{-> CREATE(Test, \"allowed\" = \"D\")};";
 
-    Ruta.apply(cas, script);
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> Ruta.apply(cas, script));
   }
 
   private CAS createCAS() throws ResourceInitializationException {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/expression/type/TypeFeatureTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/expression/type/TypeFeatureTest.java
index 38927c56..6a635ec3 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/expression/type/TypeFeatureTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/expression/type/TypeFeatureTest.java
@@ -18,11 +18,13 @@
  */
 package org.apache.uima.ruta.expression.type;
 
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TypeFeatureTest {
 
@@ -46,7 +48,7 @@ public class TypeFeatureTest {
 
   }
 
-  @Test(expected = AnalysisEngineProcessException.class)
+  @Test
   public void testAssignType() throws Exception {
 
     String document = "This is a test.";
@@ -54,7 +56,8 @@ public class TypeFeatureTest {
     String script = "cw:CW{-> cw.type = SW};\n";
 
     CAS cas = RutaTestUtils.getCAS(document);
-    Ruta.apply(cas, script);
-  }
 
+    assertThatExceptionOfType(AnalysisEngineProcessException.class)
+            .isThrownBy(() -> Ruta.apply(cas, script));
+  }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/resource/CSVTableTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/resource/CSVTableTest.java
index 6588a916..373b7584 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/resource/CSVTableTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/resource/CSVTableTest.java
@@ -18,12 +18,11 @@
  */
 package org.apache.uima.ruta.resource;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class CSVTableTest {
   private static final String CUSTOM_SEPARATOR = "#|#";
@@ -70,7 +69,7 @@ public class CSVTableTest {
 
   private void checkValue(CSVTable table, int row, int column, String expectedValue) {
     String actualValue = table.getEntry(row, column);
-    assertThat(actualValue, is(expectedValue));
+    assertThat(actualValue).isEqualTo(expectedValue);
   }
 
 }
\ No newline at end of file
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/resource/TreeWordListTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/resource/TreeWordListTest.java
index fa701f09..7d705eb9 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/resource/TreeWordListTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/resource/TreeWordListTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.uima.ruta.resource;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -38,8 +40,7 @@ import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.seed.TextSeeder;
 import org.apache.uima.ruta.type.RutaBasic;
 import org.apache.uima.ruta.visitor.InferenceCrowd;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TreeWordListTest {
 
@@ -69,16 +70,16 @@ public class TreeWordListTest {
     RutaStream stream = createStream(text, cas);
 
     List<AnnotationFS> result1 = twl.find(stream, false, 0, null, 0, false);
-    Assert.assertEquals(1, result1.size());
-    Assert.assertEquals(text, result1.get(0).getCoveredText());
+    assertThat(result1).hasSize(1);
+    assertThat(result1.get(0).getCoveredText()).isEqualTo(text);
 
     List<AnnotationFS> result2 = twl.find(stream, false, 0, null, 0, true);
-    Assert.assertEquals(1, result2.size());
-    Assert.assertEquals(text, result2.get(0).getCoveredText());
+    assertThat(result2).hasSize(1);
+    assertThat(result2.get(0).getCoveredText()).isEqualTo(text);
 
     List<AnnotationFS> result3 = twl.find(stream, true, 0, null, 0, false);
-    Assert.assertEquals(1, result3.size());
-    Assert.assertEquals(text, result3.get(0).getCoveredText());
+    assertThat(result3).hasSize(1);
+    assertThat(result3.get(0).getCoveredText()).isEqualTo(text);
   }
 
   private RutaStream createStream(String text, CAS cas) {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementTest.java
index 48a2b508..f74fc642 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ComposedRuleElementTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementWithQuantifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementWithQuantifierTest.java
index 98f46e8f..fa749a69 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementWithQuantifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ComposedRuleElementWithQuantifierTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ComposedRuleElementWithQuantifierTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
index 1d4561f6..2befccc8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ConjunctRulesTest.java
@@ -28,7 +28,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConjunctRulesTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring1Test.java
index 605d9a72..d1c658d8 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring1Test.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class DynamicAnchoring1Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring2Test.java
index f21b97aa..f9416c58 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/DynamicAnchoring2Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class DynamicAnchoring2Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ImplicitRuleTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ImplicitRuleTest.java
index 6d0dd594..cf7f2a4c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ImplicitRuleTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ImplicitRuleTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.rule;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.FSIterator;
@@ -28,7 +28,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ImplicitRuleTest {
 
@@ -50,9 +50,9 @@ public class ImplicitRuleTest {
 
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals("Some text.", iterator.next().getCoveredText());
+    assertThat(iterator.next().getCoveredText()).isEqualTo("Some text.");
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/InlinedRulesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/InlinedRulesTest.java
index 34a1038c..0a1348e0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/InlinedRulesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/InlinedRulesTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class InlinedRulesTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/InvisibleWildcardMatchTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/InvisibleWildcardMatchTest.java
index 8f6ff3dc..09c746d0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/InvisibleWildcardMatchTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/InvisibleWildcardMatchTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class InvisibleWildcardMatchTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/LiteralStringMatchTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/LiteralStringMatchTest.java
index 2f26966e..4979eafb 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/LiteralStringMatchTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/LiteralStringMatchTest.java
@@ -27,7 +27,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.seed.DefaultSeeder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class LiteralStringMatchTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ManualAnchoringTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ManualAnchoringTest.java
index e7d4a6c0..9a30660b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/ManualAnchoringTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/ManualAnchoringTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ManualAnchoringTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/MarkInGreedyComposedTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/MarkInGreedyComposedTest.java
index 36d0404b..12076d9e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/MarkInGreedyComposedTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/MarkInGreedyComposedTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class MarkInGreedyComposedTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/NestedDisjunctiveTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/NestedDisjunctiveTest.java
index 105d0f53..51a5e693 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/NestedDisjunctiveTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/NestedDisjunctiveTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class NestedDisjunctiveTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalComposedEndTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalComposedEndTest.java
index a2e98bba..39c66006 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalComposedEndTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalComposedEndTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OptionalComposedEndTest {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalDisjunctiveBeforeAnchoringTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalDisjunctiveBeforeAnchoringTest.java
index 1f04259f..a101f8f0 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalDisjunctiveBeforeAnchoringTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/OptionalDisjunctiveBeforeAnchoringTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class OptionalDisjunctiveBeforeAnchoringTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RegExpRuleTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RegExpRuleTest.java
index 9b8f5b64..8a23b25b 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RegExpRuleTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RegExpRuleTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.rule;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -36,8 +36,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RegExpRuleTest {
 
@@ -67,15 +66,15 @@ public class RegExpRuleTest {
 
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(1, ai.size());
+    assertThat(ai.size()).isEqualTo(1);
     iterator = ai.iterator();
-    assertEquals(28, iterator.next().getCoveredText().length());
+    assertThat(iterator.next().getCoveredText().length()).isEqualTo(28);
 
     t = RutaTestUtils.getTestType(cas, 2);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(1, ai.size());
-    assertEquals(26, iterator.next().getCoveredText().length());
+    assertThat(ai.size()).isEqualTo(1);
+    assertThat(iterator.next().getCoveredText().length()).isEqualTo(26);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "y", "z");
     RutaTestUtils.assertAnnotationsEquals(cas, 4, 2, "y", "z");
@@ -86,54 +85,54 @@ public class RegExpRuleTest {
     t = cas.getTypeSystem().getType(typeName);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
-    assertEquals(5, ai.size());
+    assertThat(ai.size()).isEqualTo(5);
     AnnotationFS next = null;
     String stringValue = null;
     Boolean booleanValue = null;
     AnnotationFS afs = null;
 
     next = iterator.next();
-    assertEquals("y", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("y");
     stringValue = next.getStringValue(t.getFeatureByBaseName(fn3));
-    assertEquals("ByBB", stringValue);
+    assertThat(stringValue).isEqualTo("ByBB");
     booleanValue = next.getBooleanValue(t.getFeatureByBaseName(fn2));
-    assertEquals(true, booleanValue);
+    assertThat(booleanValue).isEqualTo(true);
     afs = (AnnotationFS) next.getFeatureValue(t.getFeatureByBaseName(fn1));
-    assertEquals("B", afs.getCoveredText());
+    assertThat(afs.getCoveredText()).isEqualTo("B");
 
     next = iterator.next();
-    assertEquals("B", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("B");
     stringValue = next.getStringValue(t.getFeatureByBaseName(fn3));
-    assertEquals("ByBB", stringValue);
+    assertThat(stringValue).isEqualTo("ByBB");
     booleanValue = next.getBooleanValue(t.getFeatureByBaseName(fn2));
-    assertEquals(false, booleanValue);
+    assertThat(booleanValue).isEqualTo(false);
     afs = (AnnotationFS) next.getFeatureValue(t.getFeatureByBaseName(fn1));
-    assertEquals("y", afs.getCoveredText());
+    assertThat(afs.getCoveredText()).isEqualTo("y");
 
     next = iterator.next();
-    assertEquals("z", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("z");
     stringValue = next.getStringValue(t.getFeatureByBaseName(fn3));
-    assertEquals("BzBB", stringValue);
+    assertThat(stringValue).isEqualTo("BzBB");
     booleanValue = next.getBooleanValue(t.getFeatureByBaseName(fn2));
-    assertEquals(true, booleanValue);
+    assertThat(booleanValue).isEqualTo(true);
     afs = (AnnotationFS) next.getFeatureValue(t.getFeatureByBaseName(fn1));
-    assertEquals("B", afs.getCoveredText());
+    assertThat(afs.getCoveredText()).isEqualTo("B");
 
     next = iterator.next();
-    assertEquals("B", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("B");
     stringValue = next.getStringValue(t.getFeatureByBaseName(fn3));
-    assertEquals("BzBB", stringValue);
+    assertThat(stringValue).isEqualTo("BzBB");
     booleanValue = next.getBooleanValue(t.getFeatureByBaseName(fn2));
-    assertEquals(false, booleanValue);
+    assertThat(booleanValue).isEqualTo(false);
     afs = (AnnotationFS) next.getFeatureValue(t.getFeatureByBaseName(fn1));
-    assertEquals("z", afs.getCoveredText());
+    assertThat(afs.getCoveredText()).isEqualTo("z");
 
     next = iterator.next();
-    assertEquals("B", next.getCoveredText());
+    assertThat(next.getCoveredText()).isEqualTo("B");
     stringValue = next.getStringValue(t.getFeatureByBaseName(fn3));
-    assertEquals("BBB", stringValue);
+    assertThat(stringValue).isEqualTo("BBB");
     booleanValue = next.getBooleanValue(t.getFeatureByBaseName(fn2));
-    assertEquals(false, booleanValue);
+    assertThat(booleanValue).isEqualTo(false);
 
     cas.release();
   }
@@ -163,8 +162,8 @@ public class RegExpRuleTest {
     Ruta.apply(cas, script);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 4, "11", "11", "11", "11");
-    Assert.assertEquals(10,
-            cas.getAnnotationIndex(cas.getTypeSystem().getType(RutaTestUtils.TYPE + "2")).size());
+    assertThat(cas.getAnnotationIndex(cas.getTypeSystem().getType(RutaTestUtils.TYPE + "2")))
+            .hasSize(10);
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 4, "11", "11ab", "1122", "11");
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference1Test.java
index 4c8d2bf9..50eefff4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference1Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RuleInference1Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference2Test.java
index be6d6742..35f043b2 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference2Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RuleInference2Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference3Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference3Test.java
index b6a7e936..2599a17d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference3Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RuleInference3Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RuleInference3Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcherTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcherTest.java
index 1fa0db6e..205dd00f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcherTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcherTest.java
@@ -27,8 +27,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class RutaAnnotationTypeMatcherTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaLiteralMatcherTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaLiteralMatcherTest.java
index 5961dfa1..d6d8a9e5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaLiteralMatcherTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaLiteralMatcherTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaLiteralMatcherTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaOptionalRuleElementTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaOptionalRuleElementTest.java
index 4514779e..7ac61a9f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaOptionalRuleElementTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/RutaOptionalRuleElementTest.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class RutaOptionalRuleElementTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/SidestepInComposedTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/SidestepInComposedTest.java
index c97b34cd..7d068f7c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/SidestepInComposedTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/SidestepInComposedTest.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class SidestepInComposedTest {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard1Test.java
index 7bccb42f..50cbf3f2 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard1Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class WildCard1Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
index 03bd6418..c684b410 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.rule;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -28,8 +30,7 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class WildCard2Test {
 
@@ -153,8 +154,8 @@ public class WildCard2Test {
     Ruta.apply(cas, script);
 
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "A", "X 2 B", "B");
-    Assert.assertEquals(192,
-            cas.getAnnotationIndex(cas.getTypeSystem().getType(RutaTestUtils.TYPE + "3")).size());
+    assertThat(cas.getAnnotationIndex(cas.getTypeSystem().getType(RutaTestUtils.TYPE + "3")))
+            .hasSize(192);
     cas.release();
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard3Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard3Test.java
index 56e0f414..3721e658 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard3Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard3Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class WildCard3Test {
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCardInWindowTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCardInWindowTest.java
index 17756039..fc8f21c7 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCardInWindowTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCardInWindowTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class WildCardInWindowTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/MinMaxQuantifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/MinMaxQuantifierTest.java
index 84a8086d..9b0d59e5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/MinMaxQuantifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/MinMaxQuantifierTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule.quantifier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class MinMaxQuantifierTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier1Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier1Test.java
index 70a30630..c7eb4b48 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier1Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier1Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule.quantifier;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier1Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier2Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier2Test.java
index 533dd34d..ec50a66d 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier2Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier2Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule.quantifier;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier2Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier3Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier3Test.java
index dea32786..9839e964 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier3Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier3Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule.quantifier;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier3Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier4Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier4Test.java
index c0da0a41..c62eebee 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier4Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier4Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule.quantifier;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier4Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier5Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier5Test.java
index 1582b0ce..c8a05e7c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier5Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier5Test.java
@@ -21,7 +21,7 @@ package org.apache.uima.ruta.rule.quantifier;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier5Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier6Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier6Test.java
index df2afa04..b9fd12a4 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier6Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier6Test.java
@@ -22,7 +22,7 @@ package org.apache.uima.ruta.rule.quantifier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class Quantifier6Test {
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier7Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier7Test.java
index e3d313b5..0771f04f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier7Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier7Test.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule.quantifier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class Quantifier7Test {
   @Test
   public void test() {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier8Test.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier8Test.java
index 15aeddea..c1fc0ef3 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier8Test.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/Quantifier8Test.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule.quantifier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class Quantifier8Test {
   @Test
   public void test() {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/QuantifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/QuantifierTest.java
index 7205169b..f53205a1 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/QuantifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/QuantifierTest.java
@@ -19,14 +19,15 @@
 
 package org.apache.uima.ruta.rule.quantifier;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.List;
 
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.tcas.Annotation;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class QuantifierTest {
 
@@ -34,15 +35,15 @@ public class QuantifierTest {
   public void testRightToLeftMinMaxReluctantToLiteral() throws Exception {
 
     JCas jcas = RutaTestUtils.getCAS("a b c d e.").getJCas();
-    Assert.assertEquals("a b c d e.",
-            Ruta.select(jcas, "\"a\" W[0,5]? @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("b c d e.",
-            Ruta.select(jcas, "\"b\" W[0,5]? @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("c d e.",
-            Ruta.select(jcas, "\"c\" W[0,5]? @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("d e.",
-            Ruta.select(jcas, "\"d\" W[0,5]? @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("e.", Ruta.select(jcas, "\"e\" W[0,5]? @PERIOD;").get(0).getCoveredText());
+    assertThat(Ruta.select(jcas, "\"a\" W[0,5]? @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("a b c d e.");
+    assertThat(Ruta.select(jcas, "\"b\" W[0,5]? @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("b c d e.");
+    assertThat(Ruta.select(jcas, "\"c\" W[0,5]? @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("c d e.");
+    assertThat(Ruta.select(jcas, "\"d\" W[0,5]? @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("d e.");
+    assertThat(Ruta.select(jcas, "\"e\" W[0,5]? @PERIOD;").get(0).getCoveredText()).isEqualTo("e.");
 
     jcas.release();
   }
@@ -51,14 +52,15 @@ public class QuantifierTest {
   public void testRightToLeftMinMaxGreedyToLiteral() throws Exception {
 
     JCas jcas = RutaTestUtils.getCAS("a b c d e.").getJCas();
-    Assert.assertEquals("a b c d e.",
-            Ruta.select(jcas, "\"a\" W[0,4] @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("b c d e.",
-            Ruta.select(jcas, "\"b\" W[0,3] @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("c d e.",
-            Ruta.select(jcas, "\"c\" W[0,2] @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("d e.", Ruta.select(jcas, "\"d\" W[0,1] @PERIOD;").get(0).getCoveredText());
-    Assert.assertEquals("e.", Ruta.select(jcas, "\"e\" W[0,0] @PERIOD;").get(0).getCoveredText());
+    assertThat(Ruta.select(jcas, "\"a\" W[0,4] @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("a b c d e.");
+    assertThat(Ruta.select(jcas, "\"b\" W[0,3] @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("b c d e.");
+    assertThat(Ruta.select(jcas, "\"c\" W[0,2] @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("c d e.");
+    assertThat(Ruta.select(jcas, "\"d\" W[0,1] @PERIOD;").get(0).getCoveredText())
+            .isEqualTo("d e.");
+    assertThat(Ruta.select(jcas, "\"e\" W[0,0] @PERIOD;").get(0).getCoveredText()).isEqualTo("e.");
 
     jcas.release();
   }
@@ -67,7 +69,7 @@ public class QuantifierTest {
   public void testReluctantGreedyInComposed() throws Exception {
     JCas jcas = RutaTestUtils.getCAS("a B B . a B . a .").getJCas();
     List<Annotation> select = Ruta.select(jcas, "SW (CW+?) PERIOD;");
-    Assert.assertEquals(2, select.size());
+    assertThat(select).hasSize(2);
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/ReverseQuantifierTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/ReverseQuantifierTest.java
index 37a2c0ce..070daa82 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/ReverseQuantifierTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/rule/quantifier/ReverseQuantifierTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.rule.quantifier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ReverseQuantifierTest {
   @Test
   public void test() {
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/seed/DefaultSeederTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/seed/DefaultSeederTest.java
index 551d78e1..ade19b7e 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/seed/DefaultSeederTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/seed/DefaultSeederTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.seed;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -32,8 +32,7 @@ import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class DefaultSeederTest {
 
@@ -47,51 +46,51 @@ public class DefaultSeederTest {
 
     DefaultSeeder seeder = new DefaultSeeder();
     Type type = seeder.seed(text, cas);
-    assertEquals("org.apache.uima.ruta.type.TokenSeed", type.getName());
+    assertThat(type.getName()).isEqualTo("org.apache.uima.ruta.type.TokenSeed");
     AnnotationIndex<AnnotationFS> annotationIndex = cas.getAnnotationIndex(type);
-    assertEquals(40, annotationIndex.size());
+    assertThat(annotationIndex.size()).isEqualTo(40);
     FSIterator<AnnotationFS> iterator = annotationIndex.iterator();
 
-    assertEquals("CW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("CW", iterator.next().getType().getShortName());
-    assertEquals("CAP", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SPECIAL", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("AMP", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SPECIAL", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("EXCLAMATION", iterator.next().getType().getShortName());
-    assertEquals("QUESTION", iterator.next().getType().getShortName());
-    assertEquals("PERIOD", iterator.next().getType().getShortName());
-    assertEquals("SEMICOLON", iterator.next().getType().getShortName());
-    assertEquals("COLON", iterator.next().getType().getShortName());
-    assertEquals("COMMA", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("MARKUP", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("SPACE", iterator.next().getType().getShortName());
-    assertEquals("MARKUP", iterator.next().getType().getShortName());
-    assertEquals("SW", iterator.next().getType().getShortName());
-    assertEquals("MARKUP", iterator.next().getType().getShortName());
-    assertEquals("MARKUP", iterator.next().getType().getShortName());
-    assertEquals("MARKUP", iterator.next().getType().getShortName());
-    assertEquals("BREAK", iterator.next().getType().getShortName());
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("CW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("CW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("CAP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPECIAL");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("AMP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPECIAL");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("EXCLAMATION");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("QUESTION");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("PERIOD");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SEMICOLON");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("COLON");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("COMMA");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("MARKUP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SPACE");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("MARKUP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("SW");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("MARKUP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("MARKUP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("MARKUP");
+    assertThat(iterator.next().getType().getShortName()).isEqualTo("BREAK");
 
   }
 
@@ -135,7 +134,7 @@ public class DefaultSeederTest {
 
     Type t1 = RutaTestUtils.getTestType(cas, 1);
     AnnotationIndex<AnnotationFS> ai = cas.getAnnotationIndex(t1);
-    Assert.assertEquals(2000, ai.size());
+    assertThat(ai).hasSize(2000);
 
     cas.release();
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/seed/NBSPWSTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/seed/NBSPWSTest.java
index 5d20e34d..9a939f27 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/seed/NBSPWSTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/seed/NBSPWSTest.java
@@ -22,8 +22,7 @@ package org.apache.uima.ruta.seed;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class NBSPWSTest {
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/seed/TextSeederTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/seed/TextSeederTest.java
index 50356f91..9a0887b6 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/seed/TextSeederTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/seed/TextSeederTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.seed;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -28,8 +30,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.MARKUP;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TextSeederTest {
 
@@ -53,7 +54,7 @@ public class TextSeederTest {
             "more", "text", "-", "-", ">", "text", "text", ".");
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 0);
 
-    Assert.assertTrue(JCasUtil.select(cas.getJCas(), MARKUP.class).isEmpty());
+    assertThat(JCasUtil.select(cas.getJCas(), MARKUP.class).isEmpty()).isTrue();
   }
 
   @Test
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/type/TypeFromStringFunctionTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/type/TypeFromStringFunctionTest.java
index eb6055da..16abf111 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/type/TypeFromStringFunctionTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/type/TypeFromStringFunctionTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.type;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.net.URISyntaxException;
@@ -37,7 +37,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.util.InvalidXMLException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.xml.sax.SAXException;
 
 public class TypeFromStringFunctionTest {
@@ -66,11 +66,11 @@ public class TypeFromStringFunctionTest {
 
     t = RutaTestUtils.getTestType(cas, 1);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(7, ai.size());
+    assertThat(ai.size()).isEqualTo(7);
 
     t = RutaTestUtils.getTestType(cas, 2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(8, ai.size());
+    assertThat(ai.size()).isEqualTo(8);
 
     if (cas != null) {
       cas.release();
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
index b6f48c6f..b4af799f 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ActionVerbalizerTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.verbalizer;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -83,7 +83,7 @@ import org.apache.uima.ruta.expression.type.SimpleTypeExpression;
 import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ActionVerbalizerTest {
 
@@ -129,178 +129,179 @@ public class ActionVerbalizerTest {
     // ADD
     a = new AddAction(var, exprList);
     s = v.verbalize(a);
-    assertEquals("ADD(anyVar, Type1)", s);
+    assertThat(s).isEqualTo("ADD(anyVar, Type1)");
 
     // ASSIGN
     a = new AssignAction(var, stringExpr);
     s = v.verbalize(a);
-    assertEquals("ASSIGN(anyVar, \"string\")", s);
+    assertThat(s).isEqualTo("ASSIGN(anyVar, \"string\")");
 
     // CALL
     a = new CallAction(var);
     s = v.verbalize(a);
-    assertEquals("CALL(anyVar)", s);
+    assertThat(s).isEqualTo("CALL(anyVar)");
 
     // CLEAR
     a = new ClearAction(var);
     s = v.verbalize(a);
-    assertEquals("CLEAR(anyVar)", s);
+    assertThat(s).isEqualTo("CLEAR(anyVar)");
 
     // COLOR
     a = new ColorAction(typeExpr1, stringExpr, stringExpr, boolExpr1);
     s = v.verbalize(a);
-    assertEquals("COLOR(Type1, \"string\", \"string\", true)", s);
+    assertThat(s).isEqualTo("COLOR(Type1, \"string\", \"string\", true)");
 
     // CONFIGURE
     a = new ConfigureAction(var, stringExprMap);
     s = v.verbalize(a);
-    assertEquals("CONFIGURE(anyVar, \"string\" = \"string\")", s);
+    assertThat(s).isEqualTo("CONFIGURE(anyVar, \"string\" = \"string\")");
 
     // CREATE
     a = new CreateAction(typeExpr1, stringExprMap, indexes);
     s = v.verbalize(a);
-    assertEquals("CREATE(Type1, 4, numVar, \"string\" = \"string\")", s);
+    assertThat(s).isEqualTo("CREATE(Type1, 4, numVar, \"string\" = \"string\")");
 
     // DEL
     a = new DelAction();
     s = v.verbalize(a);
-    assertEquals("DEL", s);
+    assertThat(s).isEqualTo("DEL");
 
     // DYNAMICANCHORING
     a = new DynamicAnchoringAction(boolExpr1, numExpr1, numExpr2);
     s = v.verbalize(a);
-    assertEquals("DYNAMICANCHORING(true, 4, numVar)", s);
+    assertThat(s).isEqualTo("DYNAMICANCHORING(true, 4, numVar)");
 
     // EXEC
     a = new ExecAction(var, typeListExpr, stringExpr);
     s = v.verbalize(a);
-    assertEquals("EXEC(\"string\", anyVar, {Type1, typeVar})", s);
+    assertThat(s).isEqualTo("EXEC(\"string\", anyVar, {Type1, typeVar})");
 
     // FILL
     a = new FillAction(typeExpr1, stringExprMap);
     s = v.verbalize(a);
-    assertEquals("FILL(Type1, \"string\" = \"string\")", s);
+    assertThat(s).isEqualTo("FILL(Type1, \"string\" = \"string\")");
 
     // FILTERTYPE
     a = new FilterTypeAction(typeExprList);
     s = v.verbalize(a);
-    assertEquals("FILTERTYPE(Type1, typeVar)", s);
+    assertThat(s).isEqualTo("FILTERTYPE(Type1, typeVar)");
 
     // GATHER
     a = new GatherAction(typeExpr1, stringExprMap, indexes);
     s = v.verbalize(a);
-    assertEquals("GATHER(Type1, 4, numVar, \"string\" = \"string\")", s);
+    assertThat(s).isEqualTo("GATHER(Type1, 4, numVar, \"string\" = \"string\")");
 
     // GET
     a = new GetAction(listExpr, var, stringExpr);
     s = v.verbalize(a);
-    assertEquals("GET({Type1, typeVar}, anyVar, \"string\")", s);
+    assertThat(s).isEqualTo("GET({Type1, typeVar}, anyVar, \"string\")");
 
     // GETFEATURE
     a = new GetFeatureAction(stringExpr, var);
     s = v.verbalize(a);
-    assertEquals("GETFEATURE(\"string\", anyVar)", s);
+    assertThat(s).isEqualTo("GETFEATURE(\"string\", anyVar)");
 
     // GETLIST
     a = new GetListAction(var, stringExpr);
     s = v.verbalize(a);
-    assertEquals("GETLIST(anyVar, \"string\")", s);
+    assertThat(s).isEqualTo("GETLIST(anyVar, \"string\")");
 
     // LOG
     a = new LogAction(stringExpr, Level.INFO);
     s = v.verbalize(a);
-    assertEquals("LOG(\"string\", INFO)", s);
+    assertThat(s).isEqualTo("LOG(\"string\", INFO)");
 
     // MARK
     a = new MarkAction(typeExpr1, null, indexes);
     s = v.verbalize(a);
-    assertEquals("MARK(Type1, 4, numVar)", s);
+    assertThat(s).isEqualTo("MARK(Type1, 4, numVar)");
 
     // MARKFAST
     a = new MarkFastAction(typeExpr1, stringListExpr, boolExpr1, numExpr1, boolExpr1);
     s = v.verbalize(a);
-    assertEquals("MARKFAST(Type1, {\"string\"}, true, 4, true)", s);
+    assertThat(s).isEqualTo("MARKFAST(Type1, {\"string\"}, true, 4, true)");
 
     // MARKLAST
     a = new MarkLastAction(typeExpr1);
     s = v.verbalize(a);
-    assertEquals("MARKLAST(Type1)", s);
+    assertThat(s).isEqualTo("MARKLAST(Type1)");
 
     // MARKONCE
     a = new MarkOnceAction(typeExpr1, null, indexes);
     s = v.verbalize(a);
-    assertEquals("MARKONCE(Type1, 4, numVar)", s);
+    assertThat(s).isEqualTo("MARKONCE(Type1, 4, numVar)");
 
     // MARKSCORE
     a = new MarkAction(typeExpr1, numExpr1, indexes);
     s = v.verbalize(a);
-    assertEquals("MARKSCORE(4, Type1, 4, numVar)", s);
+    assertThat(s).isEqualTo("MARKSCORE(4, Type1, 4, numVar)");
 
     // MARKTABLE
     a = new MarkTableAction(typeExpr1, numExpr1, wordTableExpr, stringExprNumExprMap, boolExpr1,
             numExpr1, stringExpr, numExpr1);
     s = v.verbalize(a);
-    assertEquals("MARKTABLE(Type1, 4, anyVar, \"string\" = 4, , true, 4, \"string\", 4)", s);
+    assertThat(s)
+            .isEqualTo("MARKTABLE(Type1, 4, anyVar, \"string\" = 4, , true, 4, \"string\", 4)");
 
     // MATCHEDTEXT
     a = new MatchedTextAction(var, indexes);
     s = v.verbalize(a);
-    assertEquals("MATCHEDTEXT(anyVar, 4, numVar)", s);
+    assertThat(s).isEqualTo("MATCHEDTEXT(anyVar, 4, numVar)");
 
     a = new MatchedTextAction(var, null);
     s = v.verbalize(a);
-    assertEquals("MATCHEDTEXT(anyVar)", s);
+    assertThat(s).isEqualTo("MATCHEDTEXT(anyVar)");
 
     // MERGE
     a = new MergeAction(boolExpr1, var, listExprList);
     s = v.verbalize(a);
-    assertEquals("MERGE(true, anyVar, {Type1, typeVar})", s);
+    assertThat(s).isEqualTo("MERGE(true, anyVar, {Type1, typeVar})");
 
     // REMOVEDUPLICATE
     a = new RemoveDuplicateAction(var);
     s = v.verbalize(a);
-    assertEquals("REMOVEDUPLICATE(anyVar)", s);
+    assertThat(s).isEqualTo("REMOVEDUPLICATE(anyVar)");
 
     // REPLACE
     a = new ReplaceAction(stringExpr);
     s = v.verbalize(a);
-    assertEquals("REPLACE(\"string\")", s);
+    assertThat(s).isEqualTo("REPLACE(\"string\")");
 
     // RETAINTYPE
     a = new RetainTypeAction(typeExprList);
     s = v.verbalize(a);
-    assertEquals("RETAINTYPE(Type1, typeVar)", s);
+    assertThat(s).isEqualTo("RETAINTYPE(Type1, typeVar)");
 
     // SETFEATURE
     a = new SetFeatureAction(stringExpr, typeExpr1);
     s = v.verbalize(a);
-    assertEquals("SETFEATURE(\"string\", Type1)", s);
+    assertThat(s).isEqualTo("SETFEATURE(\"string\", Type1)");
 
     // SHIFT
     a = new ShiftAction(typeExpr1, indexes, null);
     s = v.verbalize(a);
-    assertEquals("SHIFT(Type1, 4, numVar)", s);
+    assertThat(s).isEqualTo("SHIFT(Type1, 4, numVar)");
 
     // TRANSFER
     a = new TransferAction(typeExpr1);
     s = v.verbalize(a);
-    assertEquals("TRANSFER(Type1)", s);
+    assertThat(s).isEqualTo("TRANSFER(Type1)");
 
     // TRIE
     a = new TrieAction(wordListExpr, stringExprTypeExprMap, boolExpr1, numExpr1, boolExpr1,
             numExpr1, stringExpr);
     s = v.verbalize(a);
-    assertEquals("TRIE(\"string\" = Type1, anyVar, true, 4, true, 4, \"string\")", s);
+    assertThat(s).isEqualTo("TRIE(\"string\" = Type1, anyVar, true, 4, true, 4, \"string\")");
 
     // UNMARK
     a = new UnmarkAction(typeExpr1, indexes, boolExpr1);
     s = v.verbalize(a);
-    assertEquals("UNMARK(Type1, 4, numVar, true)", s);
+    assertThat(s).isEqualTo("UNMARK(Type1, 4, numVar, true)");
 
     // UNMARKALL
     a = new UnmarkAllAction(typeExpr1, typeListExpr);
     s = v.verbalize(a);
-    assertEquals("UNMARKALL(Type1, {Type1, typeVar})", s);
+    assertThat(s).isEqualTo("UNMARKALL(Type1, {Type1, typeVar})");
 
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
index 7a3a45de..e6c939f2 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.verbalizer;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -67,7 +67,7 @@ import org.apache.uima.ruta.expression.type.SimpleTypeExpression;
 import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConditionVerbalizerTest {
 
@@ -95,15 +95,15 @@ public class ConditionVerbalizerTest {
     // AFTER
     c = new AfterCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("AFTER(Type1)", s);
+    assertThat(s).isEqualTo("AFTER(Type1)");
 
     c = new AfterCondition(typeExpr2);
     s = v.verbalize(c);
-    assertEquals("AFTER(typeVar)", s);
+    assertThat(s).isEqualTo("AFTER(typeVar)");
 
     c = new AfterCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("AFTER({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("AFTER({Type1, typeVar})");
 
     // AND
     List<AbstractRutaCondition> conds = new ArrayList<AbstractRutaCondition>();
@@ -113,176 +113,176 @@ public class ConditionVerbalizerTest {
     conds.add(c2);
     c = new AndCondition(conds);
     s = v.verbalize(c);
-    assertEquals("AND(AFTER(typeVar), AFTER({Type1, typeVar}))", s);
+    assertThat(s).isEqualTo("AND(AFTER(typeVar), AFTER({Type1, typeVar}))");
 
     // BEFORE
     c = new BeforeCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("BEFORE(Type1)", s);
+    assertThat(s).isEqualTo("BEFORE(Type1)");
 
     c = new BeforeCondition(typeExpr2);
     s = v.verbalize(c);
-    assertEquals("BEFORE(typeVar)", s);
+    assertThat(s).isEqualTo("BEFORE(typeVar)");
 
     c = new BeforeCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("BEFORE({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("BEFORE({Type1, typeVar})");
 
     // CONTAINS
     c = new ContainsCondition(typeExpr1, numExpr1, numExpr2, boolExpr1);
     s = v.verbalize(c);
-    assertEquals("CONTAINS(Type1, 4, numVar, true)", s);
+    assertThat(s).isEqualTo("CONTAINS(Type1, 4, numVar, true)");
 
     c = new ContainsCondition(typeExpr2, null, null, null);
     s = v.verbalize(c);
-    assertEquals("CONTAINS(typeVar)", s);
+    assertThat(s).isEqualTo("CONTAINS(typeVar)");
 
     c = new ContainsCondition(typeListExpr, typeExpr2, null, null, null);
     s = v.verbalize(c);
-    assertEquals("CONTAINS({Type1, typeVar}, typeVar)", s);
+    assertThat(s).isEqualTo("CONTAINS({Type1, typeVar}, typeVar)");
 
     // CONTEXTCOUNT
     c = new ContextCountCondition(typeExpr1, numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("CONTEXTCOUNT(Type1, 4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("CONTEXTCOUNT(Type1, 4, numVar, anyVar)");
 
     // COUNT
     c = new CountCondition(typeExpr1, numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("COUNT(Type1, 4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("COUNT(Type1, 4, numVar, anyVar)");
 
     c = new CountCondition(typeListExpr, typeExpr2, null, null, null);
     s = v.verbalize(c);
-    assertEquals("COUNT({Type1, typeVar}, typeVar)", s);
+    assertThat(s).isEqualTo("COUNT({Type1, typeVar}, typeVar)");
 
     // CURRENTCOUNT
     c = new CurrentCountCondition(typeExpr1, numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("CURRENTCOUNT(Type1, 4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("CURRENTCOUNT(Type1, 4, numVar, anyVar)");
 
     // ENDSWITH
     c = new EndsWithCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("ENDSWITH(Type1)", s);
+    assertThat(s).isEqualTo("ENDSWITH(Type1)");
 
     c = new EndsWithCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("ENDSWITH({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("ENDSWITH({Type1, typeVar})");
 
     // FEATURE
     c = new FeatureCondition(stringExpr, stringExpr);
     s = v.verbalize(c);
-    assertEquals("FEATURE(\"string\", \"string\")", s);
+    assertThat(s).isEqualTo("FEATURE(\"string\", \"string\")");
 
     // IF
     c = new IfCondition(boolExpr1);
     s = v.verbalize(c);
-    assertEquals("IF(true)", s);
+    assertThat(s).isEqualTo("IF(true)");
 
     // INLIST
     c = new InListCondition(stringListExpr, stringExpr);
     s = v.verbalize(c);
-    assertEquals("INLIST({\"string\"}, \"string\")", s);
+    assertThat(s).isEqualTo("INLIST({\"string\"}, \"string\")");
 
     // IS
     c = new IsCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("IS(Type1)", s);
+    assertThat(s).isEqualTo("IS(Type1)");
 
     c = new IsCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("IS({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("IS({Type1, typeVar})");
 
     // LAST
     c = new LastCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("LAST(Type1)", s);
+    assertThat(s).isEqualTo("LAST(Type1)");
 
     // MOFN
     c = new MOfNCondition(conds, numExpr1, numExpr2);
     s = v.verbalize(c);
-    assertEquals("MOFN(4, numVar, AFTER(typeVar), AFTER({Type1, typeVar}))", s);
+    assertThat(s).isEqualTo("MOFN(4, numVar, AFTER(typeVar), AFTER({Type1, typeVar}))");
 
     // NEAR
     c = new NearCondition(typeExpr1, numExpr1, numExpr2, boolExpr1, boolExpr1);
     s = v.verbalize(c);
-    assertEquals("NEAR(Type1, 4, numVar, true, true)", s);
+    assertThat(s).isEqualTo("NEAR(Type1, 4, numVar, true, true)");
 
     // NOT
     c = new NotCondition(c1);
     s = v.verbalize(c);
-    assertEquals("-AFTER(typeVar)", s);
+    assertThat(s).isEqualTo("-AFTER(typeVar)");
 
     // OR
     c = new OrCondition(conds);
     s = v.verbalize(c);
-    assertEquals("OR(AFTER(typeVar), AFTER({Type1, typeVar}))", s);
+    assertThat(s).isEqualTo("OR(AFTER(typeVar), AFTER({Type1, typeVar}))");
 
     // PARSE
     c = new ParseCondition(var);
     s = v.verbalize(c);
-    assertEquals("PARSE(anyVar)", s);
+    assertThat(s).isEqualTo("PARSE(anyVar)");
 
     // PARTOF
     c = new PartOfCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("PARTOF(Type1)", s);
+    assertThat(s).isEqualTo("PARTOF(Type1)");
 
     c = new PartOfCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("PARTOF({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("PARTOF({Type1, typeVar})");
 
     // PARTOFNEQ
     c = new PartOfNeqCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("PARTOFNEQ(Type1)", s);
+    assertThat(s).isEqualTo("PARTOFNEQ(Type1)");
 
     c = new PartOfNeqCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("PARTOFNEQ({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("PARTOFNEQ({Type1, typeVar})");
 
     // POSITION
     c = new PositionCondition(typeExpr1, numExpr1, boolExpr1);
     s = v.verbalize(c);
-    assertEquals("POSITION(Type1, 4, true)", s);
+    assertThat(s).isEqualTo("POSITION(Type1, 4, true)");
 
     // REGEXP
     c = new RegExpCondition(stringExpr, boolExpr1);
     s = v.verbalize(c);
-    assertEquals("REGEXP(\"string\", true)", s);
+    assertThat(s).isEqualTo("REGEXP(\"string\", true)");
 
     c = new RegExpCondition(varExpr, stringExpr, boolExpr1);
     s = v.verbalize(c);
-    assertEquals("REGEXP(anyVar, \"string\", true)", s);
+    assertThat(s).isEqualTo("REGEXP(anyVar, \"string\", true)");
 
     // SCORE
     c = new ScoreCondition(numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("SCORE(4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("SCORE(4, numVar, anyVar)");
 
     // SIZE
     c = new SizeCondition(typeListExpr, numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("SIZE({Type1, typeVar}, 4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("SIZE({Type1, typeVar}, 4, numVar, anyVar)");
 
     // STARTSWITH
     c = new StartsWithCondition(typeExpr1);
     s = v.verbalize(c);
-    assertEquals("STARTSWITH(Type1)", s);
+    assertThat(s).isEqualTo("STARTSWITH(Type1)");
 
     c = new StartsWithCondition(typeListExpr);
     s = v.verbalize(c);
-    assertEquals("STARTSWITH({Type1, typeVar})", s);
+    assertThat(s).isEqualTo("STARTSWITH({Type1, typeVar})");
 
     // TOTALCOUNT
     c = new TotalCountCondition(typeExpr1, numExpr1, numExpr2, var);
     s = v.verbalize(c);
-    assertEquals("TOTALCOUNT(Type1, 4, numVar, anyVar)", s);
+    assertThat(s).isEqualTo("TOTALCOUNT(Type1, 4, numVar, anyVar)");
 
     // VOTE
     c = new VoteCondition(typeExpr1, typeExpr2);
     s = v.verbalize(c);
-    assertEquals("VOTE(Type1, typeVar)", s);
+    assertThat(s).isEqualTo("VOTE(Type1, typeVar)");
 
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
index f3cffb37..6e8c541c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ExpressionVerbalizerTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.uima.ruta.verbalizer;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -60,7 +60,7 @@ import org.apache.uima.ruta.expression.type.SimpleTypeListExpression;
 import org.apache.uima.ruta.expression.type.TypeListVariableExpression;
 import org.apache.uima.ruta.expression.type.TypeVariableExpression;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ExpressionVerbalizerTest {
 
@@ -124,17 +124,17 @@ public class ExpressionVerbalizerTest {
     INumberExpression numExpr6 = new ComposedNumberExpression(numExprList2, opList2);
 
     s = v.verbalize(numExpr1);
-    assertEquals("4", s);
+    assertThat(s).isEqualTo("4");
     s = v.verbalize(numExpr2);
-    assertEquals("numVar", s);
+    assertThat(s).isEqualTo("numVar");
     s = v.verbalize(numExpr3);
-    assertEquals("4.9", s);
+    assertThat(s).isEqualTo("4.9");
     s = v.verbalize(numExpr4);
-    assertEquals("-4", s);
+    assertThat(s).isEqualTo("-4");
     s = v.verbalize(numExpr5);
-    assertEquals("4 + numVar", s);
+    assertThat(s).isEqualTo("4 + numVar");
     s = v.verbalize(numExpr6);
-    assertEquals("4.9 * 4 + numVar", s);
+    assertThat(s).isEqualTo("4.9 * 4 + numVar");
 
     IBooleanExpression boolExpr1 = new SimpleBooleanExpression(true);
     IBooleanExpression boolExpr2 = new SimpleBooleanExpression(false);
@@ -149,27 +149,27 @@ public class ExpressionVerbalizerTest {
     IBooleanExpression boolExpr11 = new BooleanTypeExpression(typeExpr1, "!=", typeExpr2);
 
     s = v.verbalize(boolExpr1);
-    assertEquals("true", s);
+    assertThat(s).isEqualTo("true");
     s = v.verbalize(boolExpr2);
-    assertEquals("false", s);
+    assertThat(s).isEqualTo("false");
     s = v.verbalize(boolExpr3);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
     s = v.verbalize(boolExpr4);
-    assertEquals("4 == numVar", s);
+    assertThat(s).isEqualTo("4 == numVar");
     s = v.verbalize(boolExpr5);
-    assertEquals("4 != numVar", s);
+    assertThat(s).isEqualTo("4 != numVar");
     s = v.verbalize(boolExpr6);
-    assertEquals("4 <= numVar", s);
+    assertThat(s).isEqualTo("4 <= numVar");
     s = v.verbalize(boolExpr7);
-    assertEquals("4 >= numVar", s);
+    assertThat(s).isEqualTo("4 >= numVar");
     s = v.verbalize(boolExpr8);
-    assertEquals("4 < numVar", s);
+    assertThat(s).isEqualTo("4 < numVar");
     s = v.verbalize(boolExpr9);
-    assertEquals("4 > numVar", s);
+    assertThat(s).isEqualTo("4 > numVar");
     s = v.verbalize(boolExpr10);
-    assertEquals("Type1 == typeVar", s);
+    assertThat(s).isEqualTo("Type1 == typeVar");
     s = v.verbalize(boolExpr11);
-    assertEquals("Type1 != typeVar", s);
+    assertThat(s).isEqualTo("Type1 != typeVar");
 
     List<IStringExpression> stringExprList = new ArrayList<IStringExpression>();
     AbstractStringExpression stringExpr1 = new SimpleStringExpression("string");
@@ -179,18 +179,18 @@ public class ExpressionVerbalizerTest {
     AbstractStringExpression stringExpr3 = new ComposedStringExpression(stringExprList);
 
     s = v.verbalize(stringExpr1);
-    assertEquals("\"string\"", s);
+    assertThat(s).isEqualTo("\"string\"");
     s = v.verbalize(stringExpr2);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
     s = v.verbalize(stringExpr3);
-    assertEquals("\"string\" + anyVar", s);
+    assertThat(s).isEqualTo("\"string\" + anyVar");
 
     AbstractStringListExpression sle1 = new SimpleStringListExpression(stringExprList);
     AbstractStringListExpression sle2 = new StringListVariableExpression(var);
     s = v.verbalize(sle1);
-    assertEquals("{\"string\", anyVar}", s);
+    assertThat(s).isEqualTo("{\"string\", anyVar}");
     s = v.verbalize(sle2);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
 
     List<IBooleanExpression> boolExprList = new ArrayList<IBooleanExpression>();
     boolExprList.add(boolExpr1);
@@ -198,9 +198,9 @@ public class ExpressionVerbalizerTest {
     AbstractBooleanListExpression ble1 = new SimpleBooleanListExpression(boolExprList);
     AbstractBooleanListExpression ble2 = new BooleanListVariableExpression(var);
     s = v.verbalize(ble1);
-    assertEquals("{true, anyVar}", s);
+    assertThat(s).isEqualTo("{true, anyVar}");
     s = v.verbalize(ble2);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
 
     List<INumberExpression> numExprList = new ArrayList<INumberExpression>();
     numExprList.add(numExpr1);
@@ -208,9 +208,9 @@ public class ExpressionVerbalizerTest {
     AbstractNumberListExpression nle1 = new SimpleNumberListExpression(numExprList);
     AbstractNumberListExpression nle2 = new NumberListVariableExpression(var);
     s = v.verbalize(nle1);
-    assertEquals("{4, 4.9}", s);
+    assertThat(s).isEqualTo("{4, 4.9}");
     s = v.verbalize(nle2);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
 
     List<ITypeExpression> typeExprList = new ArrayList<ITypeExpression>();
     typeExprList.add(typeExpr1);
@@ -218,27 +218,29 @@ public class ExpressionVerbalizerTest {
     AbstractTypeListExpression tle1 = new SimpleTypeListExpression(typeExprList);
     AbstractTypeListExpression tle2 = new TypeListVariableExpression(var);
     s = v.verbalize(tle1);
-    assertEquals("{Type1, typeVar}", s);
+    assertThat(s).isEqualTo("{Type1, typeVar}");
     s = v.verbalize(tle2);
-    assertEquals("anyVar", s);
+    assertThat(s).isEqualTo("anyVar");
 
   }
 
   @Test
   public void testAnnotationExpression() {
     RutaVerbalizer v = new RutaVerbalizer();
-    assertEquals("l", v.verbalize(new AnnotationLabelExpression("l")));
-    assertEquals("l", v.verbalize(new AnnotationVariableExpression("l")));
+    assertThat(v.verbalize(new AnnotationLabelExpression("l"))).isEqualTo("l");
+    assertThat(v.verbalize(new AnnotationVariableExpression("l"))).isEqualTo("l");
   }
 
   @Test
   public void testGenericFeatureExpression() {
     RutaVerbalizer v = new RutaVerbalizer();
-    assertEquals("abc.d", v.verbalize(new GenericFeatureExpression(
-            new SimpleFeatureExpression(new MatchReference("abc.d")))));
-    assertEquals("abc.d", v.verbalize(new GenericFeatureExpression(new FeatureMatchExpression(
-            new MatchReference("abc.d"), "==", new SimpleStringExpression("y")))));
-    assertEquals("", v.verbalize(new GenericFeatureExpression(null)));
+    assertThat(v.verbalize(
+            new GenericFeatureExpression(new SimpleFeatureExpression(new MatchReference("abc.d")))))
+                    .isEqualTo("abc.d");
+    assertThat(v.verbalize(
+            new GenericFeatureExpression(new FeatureMatchExpression(new MatchReference("abc.d"),
+                    "==", new SimpleStringExpression("y"))))).isEqualTo("abc.d");
+    assertThat(v.verbalize(new GenericFeatureExpression(null))).isEqualTo("");
   }
 
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/RutaVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/RutaVerbalizerTest.java
index 69b3b075..0036e068 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/RutaVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/RutaVerbalizerTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.verbalizer;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.List;
 
 import org.apache.commons.lang3.reflect.FieldUtils;
@@ -30,27 +32,27 @@ import org.apache.uima.ruta.block.ForEachBlock;
 import org.apache.uima.ruta.block.RutaScriptBlock;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.verbalize.RutaVerbalizer;
-import org.junit.Assert;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 
 public class RutaVerbalizerTest {
-  
+
   @Test
-  public void testSimpleScriptVerbalization() throws Exception{
-    
-    AnalysisEngine analysisEngine = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Verbalize");
-    RutaEngine rutaEngine = (RutaEngine) FieldUtils.readField(analysisEngine, "mAnalysisComponent", true);
+  public void testSimpleScriptVerbalization() throws Exception {
+
+    AnalysisEngine analysisEngine = AnalysisEngineFactory.createEngine(RutaEngine.class,
+            RutaEngine.PARAM_MAIN_SCRIPT, "org.apache.uima.ruta.Verbalize");
+    RutaEngine rutaEngine = (RutaEngine) FieldUtils.readField(analysisEngine, "mAnalysisComponent",
+            true);
     RutaModule module = (RutaModule) FieldUtils.readField(rutaEngine, "script", true);
     RutaVerbalizer verbalizer = new RutaVerbalizer();
-    Assert.assertNull(verbalizer.verbalize(module));
-    Assert.assertEquals("BLOCK(Verbalize) Document;", verbalizer.verbalize(module.getRootBlock()));
+    assertThat(verbalizer.verbalize(module)).isNull();
+    assertThat(verbalizer.verbalize(module.getRootBlock())).isEqualTo("BLOCK(Verbalize) Document;");
     List<RutaStatement> elements = module.getRootBlock().getElements();
-    Assert.assertEquals("Document{->CALL(Additional)};", verbalizer.verbalize(elements.get(1)));
-    Assert.assertEquals("CW.ct==\"A\"{->TruePositive};", verbalizer.verbalize(elements.get(2)));
+    assertThat(verbalizer.verbalize(elements.get(1))).isEqualTo("Document{->CALL(Additional)};");
+    assertThat(verbalizer.verbalize(elements.get(2))).isEqualTo("CW.ct==\"A\"{->TruePositive};");
     RutaScriptBlock block = (RutaScriptBlock) elements.get(3);
-    Assert.assertEquals("BLOCK(block) CW;", verbalizer.verbalize(block));
+    assertThat(verbalizer.verbalize(block)).isEqualTo("BLOCK(block) CW;");
     ForEachBlock foreach = (ForEachBlock) elements.get(4);
-    Assert.assertEquals("FOREACH(sw) SW;", verbalizer.verbalize(foreach));
+    assertThat(verbalizer.verbalize(foreach)).isEqualTo("FOREACH(sw) SW;");
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
index a48de32d..98248635 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ScriptVerbalizerTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.verbalizer;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Collection;
 
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
@@ -30,8 +32,7 @@ import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.DebugBlockApply;
 import org.apache.uima.ruta.type.DebugRuleApply;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ScriptVerbalizerTest {
 
@@ -63,11 +64,11 @@ public class ScriptVerbalizerTest {
     Ruta.applyRule(jcas, rule, RutaEngine.PARAM_DEBUG, true, RutaEngine.PARAM_DEBUG_WITH_MATCHES,
             true);
     Collection<DebugBlockApply> blockApplies = JCasUtil.select(jcas, DebugBlockApply.class);
-    Assert.assertEquals(1, blockApplies.size());
+    assertThat(blockApplies).hasSize(1);
     DebugBlockApply blockApply = blockApplies.iterator().next();
-    Assert.assertEquals(1, blockApply.getInnerApply().size());
+    assertThat(blockApply.getInnerApply()).hasSize(1);
     DebugRuleApply ruleApply = (DebugRuleApply) blockApply.getInnerApply(0);
-    Assert.assertEquals(expected, ruleApply.getElement());
+    assertThat(ruleApply.getElement()).isEqualTo(expected);
     Ruta.removeDebugInformation(jcas);
   }
 
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/visitor/DebugAddToIndexesTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/visitor/DebugAddToIndexesTest.java
index 41b51392..9cb94f91 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/visitor/DebugAddToIndexesTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/visitor/DebugAddToIndexesTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.visitor;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -31,8 +33,7 @@ import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.ruta.engine.RutaTestUtils;
 import org.apache.uima.ruta.type.DebugRuleApply;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class DebugAddToIndexesTest {
 
@@ -54,10 +55,10 @@ public class DebugAddToIndexesTest {
     JCas jcas = cas.getJCas();
 
     Collection<DebugRuleApply> debugRuleApplies = JCasUtil.select(jcas, DebugRuleApply.class);
-    Assert.assertEquals(3, debugRuleApplies.size());
+    assertThat(debugRuleApplies).hasSize(3);
     Iterator<DebugRuleApply> iterator = debugRuleApplies.iterator();
     iterator.next();
-    Assert.assertEquals("Document;", iterator.next().getElement());
-    Assert.assertEquals("CW;", iterator.next().getElement());
+    assertThat(iterator.next().getElement()).isEqualTo("Document;");
+    assertThat(iterator.next().getElement()).isEqualTo("CW;");
   }
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
index 36e097a3..354ef01c 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.uima.ruta.visitor;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -39,8 +41,7 @@ import org.apache.uima.ruta.type.DebugRuleElementMatch;
 import org.apache.uima.ruta.type.DebugRuleElementMatches;
 import org.apache.uima.ruta.type.DebugRuleMatch;
 import org.apache.uima.ruta.type.DebugScriptApply;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class InlinedRulesExplanationTest {
 
@@ -61,38 +62,38 @@ public class InlinedRulesExplanationTest {
     JCas jcas = cas.getJCas();
 
     Collection<DebugScriptApply> debugScriptApplies = JCasUtil.select(jcas, DebugScriptApply.class);
-    Assert.assertEquals(1, debugScriptApplies.size());
+    assertThat(debugScriptApplies).hasSize(1);
     DebugScriptApply debugScriptApply = debugScriptApplies.iterator().next();
-    Assert.assertTrue(debugScriptApply instanceof DebugBlockApply);
+    assertThat(debugScriptApply instanceof DebugBlockApply).isTrue();
     DebugBlockApply debugBlockApply = (DebugBlockApply) debugScriptApply;
 
     FSArray<DebugScriptApply> innerApply = debugBlockApply.getInnerApply();
-    Assert.assertEquals(1, innerApply.size());
+    assertThat(innerApply).hasSize(1);
     FeatureStructure innerApplyFS = innerApply.get(0);
-    Assert.assertTrue(debugScriptApply instanceof DebugRuleApply);
+    assertThat(debugScriptApply instanceof DebugRuleApply).isTrue();
     DebugRuleApply debugRuleApply = (DebugRuleApply) innerApplyFS;
 
     FSArray<DebugRuleMatch> rules = debugRuleApply.getRules();
-    Assert.assertEquals(1, rules.size());
+    assertThat(rules).hasSize(1);
     FeatureStructure ruleMatchFS = rules.get(0);
-    Assert.assertTrue(ruleMatchFS instanceof DebugMatchedRuleMatch);
+    assertThat(ruleMatchFS instanceof DebugMatchedRuleMatch).isTrue();
     DebugMatchedRuleMatch debugMatchedRuleMatch = (DebugMatchedRuleMatch) ruleMatchFS;
-    Assert.assertEquals(0, debugMatchedRuleMatch.getDelegates().size());
+    assertThat(debugMatchedRuleMatch.getDelegates()).hasSize(0);
 
     FSArray<DebugRuleElementMatches> reMatchesArray = debugMatchedRuleMatch.getElements();
-    Assert.assertEquals(2, reMatchesArray.size());
+    assertThat(reMatchesArray).hasSize(2);
     FeatureStructure reMatches1FS = reMatchesArray.get(0);
     FeatureStructure reMatches2FS = reMatchesArray.get(1);
-    Assert.assertTrue(reMatches1FS instanceof DebugRuleElementMatches);
-    Assert.assertTrue(reMatches2FS instanceof DebugRuleElementMatches);
+    assertThat(reMatches1FS instanceof DebugRuleElementMatches).isTrue();
+    assertThat(reMatches2FS instanceof DebugRuleElementMatches).isTrue();
     DebugRuleElementMatches re1Matches = (DebugRuleElementMatches) reMatches1FS;
     DebugRuleElementMatches re2Matches = (DebugRuleElementMatches) reMatches2FS;
 
     FSArray<DebugInlinedBlock> inlinedActionRules1 = re1Matches.getInlinedActionBlocks();
     FSArray<DebugInlinedBlock> inlinedActionRules2 = re2Matches.getInlinedActionBlocks();
 
-    Assert.assertEquals(1, inlinedActionRules1.size());
-    Assert.assertEquals(2, inlinedActionRules2.size());
+    assertThat(inlinedActionRules1).hasSize(1);
+    assertThat(inlinedActionRules2).hasSize(2);
 
     DebugRuleElementMatch re1Match = (DebugRuleElementMatch) re1Matches.getMatches().get(0);
     DebugRuleElementMatch re2Match = (DebugRuleElementMatch) re2Matches.getMatches().get(0);
@@ -100,8 +101,8 @@ public class InlinedRulesExplanationTest {
     FSArray<DebugInlinedBlock> inlinedConditionRules1 = re1Match.getInlinedConditionBlocks();
     FSArray<DebugInlinedBlock> inlinedConditionRules2 = re2Match.getInlinedConditionBlocks();
 
-    Assert.assertEquals(2, inlinedConditionRules1.size());
-    Assert.assertEquals(1, inlinedConditionRules2.size());
+    assertThat(inlinedConditionRules1).hasSize(2);
+    assertThat(inlinedConditionRules2).hasSize(1);
 
   }
 }
diff --git a/ruta-ep-core-ext/pom.xml b/ruta-ep-core-ext/pom.xml
index ed8b0a76..52f639a4 100644
--- a/ruta-ep-core-ext/pom.xml
+++ b/ruta-ep-core-ext/pom.xml
@@ -83,11 +83,6 @@
       <artifactId>org.eclipse.emf.ecore.xmi</artifactId>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
diff --git a/ruta-maven-archetype/src/main/resources/archetype-resources/src/test/java/RutaTest.java b/ruta-maven-archetype/src/main/resources/archetype-resources/src/test/java/RutaTest.java
index 2546ff6b..f18bb276 100644
--- a/ruta-maven-archetype/src/main/resources/archetype-resources/src/test/java/RutaTest.java
+++ b/ruta-maven-archetype/src/main/resources/archetype-resources/src/test/java/RutaTest.java
@@ -29,8 +29,7 @@ import org.apache.uima.fit.pipeline.SimplePipeline;
 import org.apache.uima.fit.util.JCasUtil;
 import org.apache.uima.jcas.JCas;
 import org.junit.Assert;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 import ${package}.${projectNameCamelCase}Main.RutaMention;
 
 public class RutaTest {
diff --git a/ruta-maven-plugin/pom.xml b/ruta-maven-plugin/pom.xml
index ac1f5f0e..ff8bb3fe 100644
--- a/ruta-maven-plugin/pom.xml
+++ b/ruta-maven-plugin/pom.xml
@@ -121,7 +121,6 @@
       <plugins>
         <plugin>
           <artifactId>maven-javadoc-plugin</artifactId>
-          <!-- <version>2.8.1</version> -->
           <configuration>
             <!-- avoiding javadoc warnings caused by Mojo annotations -->
             <tagletArtifacts>
@@ -176,32 +175,11 @@
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-invoker-plugin</artifactId>
-          <version>2.0.0</version>
-        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
       <plugin>
         <artifactId>maven-invoker-plugin</artifactId>
-        <configuration>
-          <projectsDirectory>src/it</projectsDirectory>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <pomIncludes>
-            <pomInclude>*/pom.xml</pomInclude>
-          </pomIncludes>
-          <settingsFile>src/it/settings.xml</settingsFile>
-          <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
-          <postBuildHookScript>verify.bsh</postBuildHookScript>
-          <goals>
-            <goal>clean</goal>
-            <goal>package</goal>
-            <goal>integration-test</goal>
-          </goals>
-          <invokerTest>conflictingShortName,importByName,multimodule,wordlists</invokerTest>
-        </configuration>
         <executions>
           <execution>
             <id>integration-test</id>
@@ -209,6 +187,22 @@
               <goal>install</goal>
               <goal>run</goal>
             </goals>
+            <configuration>
+              <projectsDirectory>src/it</projectsDirectory>
+              <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+              <pomIncludes>
+                <pomInclude>*/pom.xml</pomInclude>
+              </pomIncludes>
+              <settingsFile>src/it/settings.xml</settingsFile>
+              <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
+              <postBuildHookScript>verify.bsh</postBuildHookScript>
+              <goals>
+                <goal>clean</goal>
+                <goal>package</goal>
+                <goal>integration-test</goal>
+              </goals>
+              <invokerTest>conflictingShortName,importByName,multimodule,wordlists</invokerTest>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/ruta-maven-plugin/src/it/conflictingShortName/pom.xml b/ruta-maven-plugin/src/it/conflictingShortName/pom.xml
index 4fc448a0..cbd1cd9c 100644
--- a/ruta-maven-plugin/src/it/conflictingShortName/pom.xml
+++ b/ruta-maven-plugin/src/it/conflictingShortName/pom.xml
@@ -17,50 +17,52 @@
    under the License.
 -->
 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>test</groupId>
-	<artifactId>conflictingShortName</artifactId>
-	<version>1.0.0-SNAPSHOT</version>
-	
-	<parent>
-	  <groupId>org.apache.uima</groupId>
-	  <artifactId>parent-pom</artifactId>
-	  <version>12</version>
-	  <relativePath />
-	</parent>
-	
-	<properties>
-	  <maven.compiler.target>1.8</maven.compiler.target>
-	  <maven.compiler.source>1.8</maven.compiler.source>
-	</properties>
-	
-	<dependencies>
-	  <dependency>
-	   <groupId>org.apache.uima</groupId>
-	   <artifactId>ruta-core</artifactId>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  
+  <parent>
+    <groupId>org.apache.uima</groupId>
+    <artifactId>parent-pom</artifactId>
+    <version>16</version>
+    <relativePath />
+  </parent>
+  
+  <groupId>test</groupId>
+  <artifactId>conflictingShortName</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+    
+  <properties>
+    <maven.compiler.target>17</maven.compiler.target>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.release>17</maven.compiler.release>
+  </properties>
+  
+  <dependencies>
+    <dependency>
+     <groupId>org.apache.uima</groupId>
+     <artifactId>ruta-core</artifactId>
      <version>@project.version@</version>
-	  </dependency>
-	  <dependency>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.5</version>
       <scope>test</scope>
     </dependency>
-	</dependencies>
-	<build>
-	  <resources>
-	    <resource>
-	      <directory>src/main/ruta</directory>
-	    </resource>
+  </dependencies>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/ruta</directory>
+      </resource>
       <resource>
         <directory>src/main/resources</directory>
       </resource>
-	    <resource>
+      <resource>
         <directory>${project.build.directory}/generated-sources/ruta/descriptor</directory>
       </resource>
-	  </resources>
-		<plugins>
+    </resources>
+    <plugins>
       <plugin>
         <groupId>org.apache.uima</groupId>
         <artifactId>ruta-maven-plugin</artifactId>
@@ -94,5 +96,5 @@
         </executions>
       </plugin>
     </plugins>
-	</build>
+  </build>
 </project>
\ No newline at end of file
diff --git a/ruta-maven-plugin/src/it/conflictingShortName/src/test/java/org/apache/uima/ruta/maven/ConflictingShortNameTest.java b/ruta-maven-plugin/src/it/conflictingShortName/src/test/java/org/apache/uima/ruta/maven/ConflictingShortNameTest.java
index c627c4bb..ab36f9cf 100644
--- a/ruta-maven-plugin/src/it/conflictingShortName/src/test/java/org/apache/uima/ruta/maven/ConflictingShortNameTest.java
+++ b/ruta-maven-plugin/src/it/conflictingShortName/src/test/java/org/apache/uima/ruta/maven/ConflictingShortNameTest.java
@@ -33,8 +33,7 @@ import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.ruta.engine.RutaEngine;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class ConflictingShortNameTest {
   
   @Test
diff --git a/ruta-maven-plugin/src/it/importByName/pom.xml b/ruta-maven-plugin/src/it/importByName/pom.xml
index 14abc785..a6eb44e6 100644
--- a/ruta-maven-plugin/src/it/importByName/pom.xml
+++ b/ruta-maven-plugin/src/it/importByName/pom.xml
@@ -17,47 +17,49 @@
    under the License.
 -->
 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>test</groupId>
-	<artifactId>importByName</artifactId>
-	<version>1.0.0-SNAPSHOT</version>
-	
-	<parent>
-	  <groupId>org.apache.uima</groupId>
-	  <artifactId>parent-pom</artifactId>
-	  <version>12</version>
-	  <relativePath />
-	</parent>
-	
-	<properties>
-	  <maven.compiler.target>1.8</maven.compiler.target>
-	  <maven.compiler.source>1.8</maven.compiler.source>
-	</properties>
-	
-	<dependencies>
-	  <dependency>
-	   <groupId>org.apache.uima</groupId>
-	   <artifactId>ruta-core</artifactId>
-	    <version>@project.version@</version>
-	  </dependency>
-	  <dependency>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.uima</groupId>
+    <artifactId>parent-pom</artifactId>
+    <version>16</version>
+    <relativePath />
+  </parent>
+  
+  <groupId>test</groupId>
+  <artifactId>importByName</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+    
+  <properties>
+    <maven.compiler.target>17</maven.compiler.target>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.release>17</maven.compiler.release>
+  </properties>
+  
+  <dependencies>
+    <dependency>
+     <groupId>org.apache.uima</groupId>
+     <artifactId>ruta-core</artifactId>
+      <version>@project.version@</version>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.5</version>
       <scope>test</scope>
     </dependency>
-	</dependencies>
-	<build>
-	  <resources>
-	    <resource>
-	      <directory>src/main/ruta</directory>
-	    </resource>
-	    <resource>
+  </dependencies>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/ruta</directory>
+      </resource>
+      <resource>
         <directory>${project.build.directory}/generated-sources/ruta/descriptor</directory>
       </resource>
-	  </resources>
-		<plugins>
+    </resources>
+    <plugins>
       <plugin>
         <groupId>org.apache.uima</groupId>
         <artifactId>ruta-maven-plugin</artifactId>
@@ -91,5 +93,5 @@
         </executions>
       </plugin>
     </plugins>
-	</build>
+  </build>
 </project>
\ No newline at end of file
diff --git a/ruta-maven-plugin/src/it/importByName/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java b/ruta-maven-plugin/src/it/importByName/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
index a5723b17..ebda9c9e 100644
--- a/ruta-maven-plugin/src/it/importByName/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
+++ b/ruta-maven-plugin/src/it/importByName/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
@@ -31,8 +31,7 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 public class OneEngineTest {
   
   @Test
diff --git a/ruta-maven-plugin/src/it/multimodule/main/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java b/ruta-maven-plugin/src/it/multimodule/main/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
index 91f066d2..cfddef89 100644
--- a/ruta-maven-plugin/src/it/multimodule/main/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
+++ b/ruta-maven-plugin/src/it/multimodule/main/src/test/java/org/apache/uima/ruta/maven/OneEngineTest.java
@@ -31,7 +31,7 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
 import org.apache.uima.util.XMLInputSource;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class OneEngineTest {
   
diff --git a/ruta-maven-plugin/src/it/multimodule/pom.xml b/ruta-maven-plugin/src/it/multimodule/pom.xml
index e6a7f4fd..dff26066 100644
--- a/ruta-maven-plugin/src/it/multimodule/pom.xml
+++ b/ruta-maven-plugin/src/it/multimodule/pom.xml
@@ -17,27 +17,28 @@
    under the License.
 -->
 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
 
-	<artifactId>multimodule</artifactId>
-	<version>1.0.0-SNAPSHOT</version>
-	<packaging>pom</packaging>
+  <parent>
+    <groupId>org.apache.uima</groupId>
+    <artifactId>parent-pom</artifactId>
+    <version>16</version>
+    <relativePath />
+  </parent>
 
-    <parent>
-	  <groupId>org.apache.uima</groupId>
-	  <artifactId>parent-pom</artifactId>
-	  <version>12</version>
-	  <relativePath />
-	</parent>
-	
-	<properties>
-	  <maven.compiler.target>1.8</maven.compiler.target>
-	  <maven.compiler.source>1.8</maven.compiler.source>
-	</properties>
+  <artifactId>multimodule</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
 
-	<modules>
-		<module>additional</module>
-		<module>main</module>
-	</modules>
+  <properties>
+    <maven.compiler.target>17</maven.compiler.target>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.release>17</maven.compiler.release>
+  </properties>
+
+  <modules>
+    <module>additional</module>
+    <module>main</module>
+  </modules>
 </project>
\ No newline at end of file
diff --git a/ruta-maven-plugin/src/it/wordlists/pom.xml b/ruta-maven-plugin/src/it/wordlists/pom.xml
index 6392fa42..19e34f3a 100644
--- a/ruta-maven-plugin/src/it/wordlists/pom.xml
+++ b/ruta-maven-plugin/src/it/wordlists/pom.xml
@@ -17,47 +17,49 @@
    under the License.
 -->
 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>test</groupId>
-	<artifactId>wordlists</artifactId>
-	<version>1.0.0-SNAPSHOT</version>
-	
-	<parent>
-	  <groupId>org.apache.uima</groupId>
-	  <artifactId>parent-pom</artifactId>
-	  <version>12</version>
-	  <relativePath />
-	</parent>
-	
-	<properties>
-	  <maven.compiler.target>1.8</maven.compiler.target>
-	  <maven.compiler.source>1.8</maven.compiler.source>
-	</properties>
-	
-	<dependencies>
-	  <dependency>
-	   <groupId>org.apache.uima</groupId>
-	   <artifactId>ruta-core</artifactId>
... 162 lines suppressed ...