Move to JUnit 5 .
diff --git a/app/pom.xml b/app/pom.xml
index 6e7a090..7c700cf 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -457,8 +457,8 @@
         <!-- Test deps -->
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
             <scope>test</scope>
         </dependency>
 
@@ -641,7 +641,7 @@
 
             <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <version>2.17</version>
+                <version>2.22.0</version>
                 <configuration>
                     <systemProperties>
                         <property>
@@ -649,9 +649,6 @@
                             <value>${basedir}/target</value>
                         </property>
                     </systemProperties>
-                    <!--excludes>
-                        <exclude>**/??.java</exclude>
-                    </excludes-->
                 </configuration>
             </plugin>
 
diff --git a/app/src/main/java/org/apache/roller/weblogger/TestUtils.java b/app/src/main/java/org/apache/roller/weblogger/TestUtils.java
index b37ad72..125d3f2 100644
--- a/app/src/main/java/org/apache/roller/weblogger/TestUtils.java
+++ b/app/src/main/java/org/apache/roller/weblogger/TestUtils.java
@@ -412,8 +412,7 @@
     public static void teardownWeblogEntry(String id) throws Exception {
 
         // lookup the entry
-        WeblogEntryManager mgr = WebloggerFactory.getWeblogger()
-                .getWeblogEntryManager();
+        WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
         WeblogEntry entry = mgr.getWeblogEntry(id);
 
         // remove the entry
diff --git a/app/src/test/java/org/apache/roller/planet/business/EntryBasicTests.java b/app/src/test/java/org/apache/roller/planet/business/EntryBasicTests.java
index f7b5134..2ec8b87 100644
--- a/app/src/test/java/org/apache/roller/planet/business/EntryBasicTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/EntryBasicTests.java
@@ -16,34 +16,36 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
-import org.apache.roller.planet.pojos.SubscriptionEntry;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.planet.pojos.SubscriptionEntry;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Entry CRUD.
  */
-public class EntryBasicTests extends TestCase {
+public class EntryBasicTests {
     
     private Subscription testSub = null;
-    
-    
-    protected void setUp() throws Exception {
-        // setup planet
+
+    @BeforeEach
+    public void setUp() throws Exception {
         TestUtils.setupWeblogger();
-        
         testSub = TestUtils.setupSubscription("entryBasicTest");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownSubscription(testSub.getId());
     }
     
-    
+    @Test
     public void testEntryCRUD() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
@@ -85,5 +87,5 @@
         entry = mgr.getEntryById(testEntry.getId());
         assertNull(entry);
     }
-    
+
 }
diff --git a/app/src/test/java/org/apache/roller/planet/business/EntryFunctionalTests.java b/app/src/test/java/org/apache/roller/planet/business/EntryFunctionalTests.java
index a148d36..f6c68ba 100644
--- a/app/src/test/java/org/apache/roller/planet/business/EntryFunctionalTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/EntryFunctionalTests.java
@@ -16,22 +16,28 @@
 
 package org.apache.roller.planet.business;
 
-import java.util.Date;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.pojos.Planet;
-import org.apache.roller.planet.pojos.SubscriptionEntry;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.planet.pojos.SubscriptionEntry;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Date;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 
 /**
  * Test planet Entry functionality.
  */
-public class EntryFunctionalTests extends TestCase {
+public class EntryFunctionalTests  {
     
     public static Log log = LogFactory.getLog(EntryFunctionalTests.class);
     
@@ -43,8 +49,9 @@
     private SubscriptionEntry testEntry2 = null;
     private SubscriptionEntry testEntry3 = null;
     
-    
-    protected void setUp() throws Exception {
+
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
 
@@ -71,8 +78,8 @@
         log.info("EXITED");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         log.info("ENTERED");
         
         TestUtils.teardownSubscription(testSub1.getId());
@@ -83,7 +90,8 @@
         log.info("EXITED");
     }
     
-    
+
+    @Test
     public void testEntryLookups() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
@@ -108,7 +116,7 @@
         assertEquals(0, mgr.getEntries(group, new Date(), null, 0, 10).size());
     }
     
-    
+    @Test
     public void testDeleteEntries() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
diff --git a/app/src/test/java/org/apache/roller/planet/business/GroupBasicTests.java b/app/src/test/java/org/apache/roller/planet/business/GroupBasicTests.java
index a03c851..01e1d41 100644
--- a/app/src/test/java/org/apache/roller/planet/business/GroupBasicTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/GroupBasicTests.java
@@ -16,32 +16,37 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
 import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Group CRUD.
  */
-public class GroupBasicTests extends TestCase {
+public class GroupBasicTests  {
     
     private Planet testPlanet = null;
     
-    
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
+        testPlanet = TestUtils.setupPlanet("planetFuncTest");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownPlanet(testPlanet.getId());
     }
     
-    
+    @Test
     public void testGroupCRUD() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
diff --git a/app/src/test/java/org/apache/roller/planet/business/GroupFunctionalTests.java b/app/src/test/java/org/apache/roller/planet/business/GroupFunctionalTests.java
index 361f333..ced6a41 100644
--- a/app/src/test/java/org/apache/roller/planet/business/GroupFunctionalTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/GroupFunctionalTests.java
@@ -16,25 +16,31 @@
 
 package org.apache.roller.planet.business;
 
-import java.util.Set;
-import junit.framework.TestCase;
 import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Set;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 
 /**
  * Test planet Group functionality.
  */
-public class GroupFunctionalTests extends TestCase {
+public class GroupFunctionalTests  {
     
     private Planet testPlanet = null;
     private PlanetGroup testGroup1 = null;
     private PlanetGroup testGroup2 = null;
     
-    
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
 
@@ -43,14 +49,14 @@
         testGroup2 = TestUtils.setupGroup(testPlanet, "groupFuncTest2");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownGroup(testGroup1.getId());
         TestUtils.teardownGroup(testGroup2.getId());
         TestUtils.teardownPlanet(testPlanet.getId());
     }
     
-    
+    @Test
     public void testGroupLookups() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
diff --git a/app/src/test/java/org/apache/roller/planet/business/PlanetBasicTests.java b/app/src/test/java/org/apache/roller/planet/business/PlanetBasicTests.java
index f0e400d..9ee25bb 100644
--- a/app/src/test/java/org/apache/roller/planet/business/PlanetBasicTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/PlanetBasicTests.java
@@ -16,22 +16,24 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Planet CRUD.
  */
-public class PlanetBasicTests extends TestCase {
+public class PlanetBasicTests  {
     
     public static Log log = LogFactory.getLog(PlanetBasicTests.class);
     
-    
+    @Test
     public void testPlanetCRUD() throws Exception {
         
         // setup planet
diff --git a/app/src/test/java/org/apache/roller/planet/business/PlanetFunctionalTests.java b/app/src/test/java/org/apache/roller/planet/business/PlanetFunctionalTests.java
index c2f5e83..3aa8fce 100644
--- a/app/src/test/java/org/apache/roller/planet/business/PlanetFunctionalTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/PlanetFunctionalTests.java
@@ -16,34 +16,43 @@
 
 package org.apache.roller.planet.business;
 
-import java.util.List;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.planet.pojos.Planet;
+import org.apache.roller.testing.DerbyExtension;
+import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 
 /**
  * Test Planet functionality.
  */
-public class PlanetFunctionalTests extends TestCase {
+//@ExtendWith(DerbyExtension.class)
+public class PlanetFunctionalTests  {
     
     public static Log log = LogFactory.getLog(PlanetFunctionalTests.class);
     
     private Planet testPlanet = null;
     
-    
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
 
         testPlanet = TestUtils.setupPlanet("planetFuncTest");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownPlanet(testPlanet.getId());
     }
     
@@ -51,27 +60,25 @@
     /**
      * Test lookup mechanisms.
      */
+    @Test
     public void testPlanetLookups() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
         
-        Planet planet = null;
-        
         // by id
-        planet = mgr.getWebloggerById(testPlanet.getId());
+        Planet planet = mgr.getWebloggerById(testPlanet.getId());
         assertNotNull(planet);
         assertEquals("planetFuncTest", planet.getHandle());
         
         // by handle
-        planet = null;
         planet = mgr.getWeblogger("planetFuncTest");
         assertNotNull(planet);
         assertEquals("planetFuncTest", planet.getHandle());
         
-        // all planets
+        // all planets (should be 2, the default and the one we created)
         List planets = mgr.getWebloggers();
         assertNotNull(planets);
-        assertEquals(1, planets.size());
+        assertEquals(2, planets.size());
     }
     
 }
diff --git a/app/src/test/java/org/apache/roller/planet/business/PlanetTestSuite.java b/app/src/test/java/org/apache/roller/planet/business/PlanetTestSuite.java
deleted file mode 100644
index 3f20eeb..0000000
--- a/app/src/test/java/org/apache/roller/planet/business/PlanetTestSuite.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.  For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-
-package org.apache.roller.planet.business;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * Test core business services.
- *
- * The core business services are the things which allow the business layer as
- * a whole to function.  Examples would be the PropertiesManager which is
- * involved in servicing the core application config.
- *
- * Tests from from this suite should only include things that are not part of
- * or dependent on the core weblog platform, i.e. you don't need a user or a
- * weblog to do them.
- */
-public class PlanetTestSuite {
-    
-    public static Test suite() {
-
-        TestSuite suite = new TestSuite();
-	
-        // TODO: add a test for PlanetConfig
-        
-        suite.addTestSuite(PropertiesTest.class);
-        
-        // planets
-        suite.addTestSuite(PlanetBasicTests.class);
-        suite.addTestSuite(PlanetFunctionalTests.class);
-        
-        // groups
-        suite.addTestSuite(GroupBasicTests.class);
-        suite.addTestSuite(GroupFunctionalTests.class);
-        
-        // subscriptions
-        suite.addTestSuite(SubscriptionBasicTests.class);
-        suite.addTestSuite(SubscriptionFunctionalTests.class);
-        
-        // entries
-        suite.addTestSuite(EntryBasicTests.class);
-        suite.addTestSuite(EntryFunctionalTests.class);
-        
-        // fetching
-        suite.addTestSuite(RomeFeedFetcherTest.class);
-        
-        // updating
-        suite.addTestSuite(SingleThreadedFeedUpdaterTest.class);
-        
-        return suite;
-    }
-    
-}
diff --git a/app/src/test/java/org/apache/roller/planet/business/PropertiesTest.java b/app/src/test/java/org/apache/roller/planet/business/PropertiesTest.java
index 5c3e745..2a4217a 100644
--- a/app/src/test/java/org/apache/roller/planet/business/PropertiesTest.java
+++ b/app/src/test/java/org/apache/roller/planet/business/PropertiesTest.java
@@ -18,33 +18,39 @@
 
 package org.apache.roller.planet.business;
 
-import java.util.Map;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.PropertiesManager;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Properties related business operations.
  */
-public class PropertiesTest extends TestCase {
+public class PropertiesTest  {
     
     public static Log log = LogFactory.getLog(PropertiesTest.class);
     
-    
+    @BeforeEach
     public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
 
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {}
     
-    
+    @Test
     public void testProperiesCRUD() throws Exception {
         
         // remember, the properties table is initialized during Roller startup
diff --git a/app/src/test/java/org/apache/roller/planet/business/RomeFeedFetcherTest.java b/app/src/test/java/org/apache/roller/planet/business/RomeFeedFetcherTest.java
index b70c3f1..6dfba0a 100644
--- a/app/src/test/java/org/apache/roller/planet/business/RomeFeedFetcherTest.java
+++ b/app/src/test/java/org/apache/roller/planet/business/RomeFeedFetcherTest.java
@@ -16,40 +16,40 @@
 
 package org.apache.roller.planet.business;
 
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.planet.business.fetcher.FeedFetcher;
 import org.apache.roller.planet.business.fetcher.FetcherException;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
-import org.junit.Ignore;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test database implementation of PlanetManager.
  */
-@Ignore("Until rollerweblogger.org sorts out SSL issues")
-public class RomeFeedFetcherTest extends TestCase {
+public class RomeFeedFetcherTest  {
     
     public static Log log = LogFactory.getLog(RomeFeedFetcherTest.class);
     
     String feed_url = "https://rollerweblogger.org/roller/feed/entries/atom";
     
-    
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
     }
-    
-    
+
+    @Test
     public void testFetchFeed() throws FetcherException {
         try {
             FeedFetcher feedFetcher = WebloggerFactory.getWeblogger().getFeedFetcher();
@@ -68,8 +68,9 @@
             throw ex;
         }
     }
-    
-    
+
+
+    @Test
     public void testFetchFeedConditionally() throws FetcherException {
         try {
             FeedFetcher feedFetcher = WebloggerFactory.getWeblogger().getFeedFetcher();
diff --git a/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java b/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
index ad89f3e..b8f6b1a 100644
--- a/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
+++ b/app/src/test/java/org/apache/roller/planet/business/SingleThreadedFeedUpdaterTest.java
@@ -16,7 +16,6 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.business.updater.FeedUpdater;
@@ -24,14 +23,17 @@
 import org.apache.roller.planet.pojos.Subscription;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
-import org.junit.Ignore;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test feed updater.
  */
-@Ignore("Until rollerweblogger.org sorts out SSL issues")
-public class SingleThreadedFeedUpdaterTest extends TestCase {
+public class SingleThreadedFeedUpdaterTest  {
     
     public static Log log = LogFactory.getLog(SingleThreadedFeedUpdaterTest.class);
     
@@ -39,8 +41,9 @@
     
     private String feed_url = "https://rollerweblogger.org/roller/feed/entries/atom";
     
-    
-    protected void setUp() throws Exception {
+
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
         
@@ -53,12 +56,12 @@
         WebloggerFactory.getWeblogger().flush();
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownSubscription(testSub.getId());
     }
-    
-    
+
+    @Test
     public void testUpdateSubscription() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
diff --git a/app/src/test/java/org/apache/roller/planet/business/SubscriptionBasicTests.java b/app/src/test/java/org/apache/roller/planet/business/SubscriptionBasicTests.java
index 9f26066..efa3c35 100644
--- a/app/src/test/java/org/apache/roller/planet/business/SubscriptionBasicTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/SubscriptionBasicTests.java
@@ -16,18 +16,20 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
-import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Subscription CRUD.
  */
-public class SubscriptionBasicTests extends TestCase {
+public class SubscriptionBasicTests  {
     
-    
+    @Test
     public void testSubscriptionCRUD() throws Exception {
         
         // setup planet
diff --git a/app/src/test/java/org/apache/roller/planet/business/SubscriptionFunctionalTests.java b/app/src/test/java/org/apache/roller/planet/business/SubscriptionFunctionalTests.java
index 0e801d9..df0ebf1 100644
--- a/app/src/test/java/org/apache/roller/planet/business/SubscriptionFunctionalTests.java
+++ b/app/src/test/java/org/apache/roller/planet/business/SubscriptionFunctionalTests.java
@@ -16,18 +16,22 @@
 
 package org.apache.roller.planet.business;
 
-import junit.framework.TestCase;
-import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.planet.pojos.Subscription;
+import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test Subscription functionality.
  */
-public class SubscriptionFunctionalTests extends TestCase {
+public class SubscriptionFunctionalTests  {
     
     private Planet testPlanet = null;
     private PlanetGroup testGroup1 = null;
@@ -35,8 +39,8 @@
     private Subscription testSub1 = null;
     private Subscription testSub2 = null;
     
-    
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup planet
         TestUtils.setupWeblogger();
 
@@ -47,8 +51,8 @@
         testSub2 = TestUtils.setupSubscription("subFuncTest2");
     }
     
-    
-    protected void tearDown() throws Exception {
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownSubscription(testSub1.getId());
         TestUtils.teardownSubscription(testSub2.getId());
         TestUtils.teardownGroup(testGroup1.getId());
@@ -56,7 +60,7 @@
         TestUtils.teardownPlanet(testPlanet.getId());
     }
     
-    
+    @Test
     public void testSubscriptionLookups() throws Exception {
         
         PlanetManager mgr = WebloggerFactory.getWeblogger().getPlanetManager();
@@ -76,7 +80,7 @@
         assertEquals(2, mgr.getSubscriptionCount());
     }
     
-    
+    @Test
     public void testSubscriptionGroupCRUD() throws Exception {
         
         PlanetManager planet = WebloggerFactory.getWeblogger().getPlanetManager();
diff --git a/app/src/test/java/org/apache/roller/planet/util/rome/DiskFeedInfoCacheTest.java b/app/src/test/java/org/apache/roller/planet/util/rome/DiskFeedInfoCacheTest.java
index 5c8bc80..6a7b62e 100644
--- a/app/src/test/java/org/apache/roller/planet/util/rome/DiskFeedInfoCacheTest.java
+++ b/app/src/test/java/org/apache/roller/planet/util/rome/DiskFeedInfoCacheTest.java
@@ -16,25 +16,22 @@
 
 package org.apache.roller.planet.util.rome;
 
+import com.rometools.fetcher.impl.DiskFeedInfoCache;
+import com.rometools.fetcher.impl.SyndFeedInfo;
+import org.apache.roller.weblogger.config.WebloggerConfig;
+import org.junit.jupiter.api.Test;
+
 import java.io.File;
 import java.net.URL;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import com.rometools.fetcher.impl.SyndFeedInfo;
-import com.rometools.fetcher.impl.DiskFeedInfoCache;
-import org.apache.roller.weblogger.config.WebloggerConfig;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * @author David M Johnson
  */
-public class DiskFeedInfoCacheTest extends TestCase {
+public class DiskFeedInfoCacheTest  {
     
-    public static void main(String[] args) {
-        junit.textui.TestRunner.run(DiskFeedInfoCacheTest.class);
-    }
-    
+    @Test
     public void testCache() throws Exception {
         URL url = new URL("http://cnn.com");
         SyndFeedInfo info = new SyndFeedInfo();
@@ -42,7 +39,7 @@
         
         String testPlanetCache = WebloggerConfig.getProperty("cache.dir");
         assertNotNull("testPlanetCache not null", testPlanetCache);
-        assertTrue("testPlanetCache not zero length", testPlanetCache.trim().length() > 0);
+        assertTrue( testPlanetCache.trim().length() > 0, "testPlanetCache not zero length");
         
         File cacheDir = new File(testPlanetCache);
         if (!cacheDir.exists()) cacheDir.mkdirs();
@@ -56,9 +53,4 @@
         assertEquals(url, info2.getUrl());
     }
     
-    public static Test suite() {
-        return new TestSuite(DiskFeedInfoCacheTest.class);
-        
-    }
-    
 }
diff --git a/app/src/test/java/org/apache/roller/testing/DerbyExtension.java b/app/src/test/java/org/apache/roller/testing/DerbyExtension.java
new file mode 100644
index 0000000..0defb88
--- /dev/null
+++ b/app/src/test/java/org/apache/roller/testing/DerbyExtension.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.testing;
+
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.derby.drda.NetworkServerControl;
+import org.apache.roller.weblogger.business.startup.SQLScriptRunner;
+import org.junit.jupiter.api.extension.*;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+
+public class DerbyExtension implements BeforeAllCallback, AfterAllCallback {
+
+    private static Log log = LogFactory.getLog(DerbyExtension.class);
+
+    private static DerbyStartStopper derbyStartStopper =
+        new DerbyStartStopper("target/derby-system", "target/dbscripts", "4224");
+
+    @Override
+    public void beforeAll(ExtensionContext extensionContext) throws Exception {
+        derbyStartStopper.start();
+    }
+
+    @Override
+    public void afterAll(ExtensionContext extensionContext) throws Exception {
+        try {
+            derbyStartStopper.stop();
+        } catch (Exception e) {
+            log.warn("Error stopping Derby", e);
+        }
+    }
+}
+
+
+class DerbyStartStopper {
+    private String databaseDir;
+    private String databaseScriptsDir;
+    private String port;
+
+
+    DerbyStartStopper( String databaseDir, String databaseScriptsDir, String port ) {
+        this.databaseDir = databaseDir;
+        this.databaseScriptsDir = databaseScriptsDir;
+        this.port = port;
+    }
+
+    public void start() throws Exception {
+
+        System.out.println("==============");
+        System.out.println("Starting Derby");
+        System.out.println("==============");
+
+        System.setProperty("derby.system.home", databaseDir);
+        System.setProperty("derby.drda.portNumber", port);
+        System.setProperty("derby.drda.host", "localhost");
+        System.setProperty("derby.drda.maxThreads", "10");
+        //System.setProperty("derby.drda.logConnections","true");
+
+        NetworkServerControl server = new NetworkServerControl();
+        server.start(new PrintWriter(System.out));
+        try {
+            Thread.sleep(2000);
+        } catch (Exception ignored) {
+        }
+        System.out.println("Runtime Info: " + server.getRuntimeInfo());
+        System.out.println("System Info:  " + server.getSysinfo());
+
+        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+        Connection conn = DriverManager.getConnection("jdbc:derby:rollerdb;create=true", "APP", "APP");
+
+        // create roller tables
+
+        SQLScriptRunner runner1 = new SQLScriptRunner(
+            databaseScriptsDir
+                + File.separator + "droptables.sql");
+        runner1.runScript(conn, false);
+
+        SQLScriptRunner runner = new SQLScriptRunner(
+            databaseScriptsDir
+                + File.separator + "derby"
+                + File.separator + "createdb.sql");
+        try {
+            runner.runScript(conn, true);
+        } catch (Exception ignored) {
+            for (String message : runner.getMessages()) {
+                System.out.println(message);
+            }
+            ignored.printStackTrace();
+        }
+    }
+
+    public void stop() throws Exception {
+
+        String driverURL = "jdbc:derby://localhost:" + port + "/rollerdb";
+
+        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+        Connection conn = DriverManager.getConnection(driverURL,"APP", "APP");
+
+        // drop Roller tables
+        SQLScriptRunner runner = new SQLScriptRunner(
+            databaseScriptsDir + File.separator + "droptables.sql");
+        runner.runScript(conn, false);
+
+        System.out.println("==============");
+        System.out.println("Stopping Derby");
+        System.out.println("==============");
+
+        try {
+            DriverManager.getConnection(driverURL + ";shutdown=true");
+        } catch (Exception ignored) {
+        }
+
+        System.setProperty("derby.system.home", databaseDir);
+
+        // Network Derby
+        System.setProperty("derby.drda.portNumber", port);
+        System.setProperty("derby.drda.host", "localhost");
+        System.setProperty("derby.drda.maxThreads", "10");
+        //System.setProperty("derby.drda.logConnections","true");
+        NetworkServerControl server = new NetworkServerControl();
+        server.shutdown();
+
+        try {
+            while (true) {
+               server.ping();
+            }
+        } catch (Exception expected) {}
+
+        DriverManager.getConnection("jdbc:derby:;shutdown=true");
+
+        try {Thread.sleep(2000);} catch (Exception ignored) {}
+    }
+}
+
diff --git a/app/src/test/java/org/apache/roller/util/PropertyExpanderTest.java b/app/src/test/java/org/apache/roller/util/PropertyExpanderTest.java
index c57bb5d..c69de7c 100644
--- a/app/src/test/java/org/apache/roller/util/PropertyExpanderTest.java
+++ b/app/src/test/java/org/apache/roller/util/PropertyExpanderTest.java
@@ -18,42 +18,45 @@
 

 package org.apache.roller.util;

 

+import org.junit.jupiter.api.Test;

+

 import java.util.HashMap;

 import java.util.Map;

-import junit.framework.TestCase;

 

+import static org.junit.jupiter.api.Assertions.assertEquals;

 

 /**

  * Unit test for org.apache.roller.weblogger.util.PropertyExpander.

  *

  * @author <a href="mailto:anil@busybuddha.org">Anil Gangolli</a>

  */

-public class PropertyExpanderTest extends TestCase {

+class PropertyExpanderTest  {

     

-    private static final Map props = new HashMap();

+    private static final Map<String, String> props = new HashMap<>();

     

-    static

-    {

+    static {

         props.put("defined.property.one", "value one");

         props.put("defined.property.two", "value two");

         props.put("defined.property.with.dollar.sign.in.value", "$2");

     }

-    

-    public void testExpansion() throws Exception {

+

+    @Test

+    void testExpansion() throws Exception {

         String expanded =

                 PropertyExpander.expandProperties("String with ${defined.property.one} and ${defined.property.two} and ${defined.property.with.dollar.sign.in.value} and ${undefined.property} and some stuff.", props);

         

-        assertEquals("Expanded string doesn't match expected",

-                "String with value one and value two and $2 and ${undefined.property} and some stuff.",

-                expanded);

+        assertEquals(expanded,

+            "String with value one and value two and $2 and ${undefined.property} and some stuff.",

+            "Expanded string doesn't match expected");

     }

-    

-    public void testSystemProperty() throws Exception {

-        String expanded =

-                PropertyExpander.expandSystemProperties("${java.home}");

-        assertEquals("Expanded string doesn't match expected",

-                System.getProperty("java.home"),

-                expanded);

+

+    @Test

+    void testSystemProperty() throws Exception {

+        String expanded = PropertyExpander.expandSystemProperties("${java.home}");

+        assertEquals(expanded,

+            System.getProperty("java.home"),

+            "Expanded string doesn't match expected"

+        );

     }

     

 }

diff --git a/app/src/test/java/org/apache/roller/util/RegexUtilTest.java b/app/src/test/java/org/apache/roller/util/RegexUtilTest.java
index c879fe8..c94b7af 100644
--- a/app/src/test/java/org/apache/roller/util/RegexUtilTest.java
+++ b/app/src/test/java/org/apache/roller/util/RegexUtilTest.java
@@ -18,44 +18,17 @@
 
 package org.apache.roller.util;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test regex utils.
  */
-public class RegexUtilTest extends TestCase {
-    
-    /**
-     *
-     */
-    public RegexUtilTest() {
-        super();
-    }
-    
-    /**
-     * @param arg0
-     */
-    public RegexUtilTest(String arg0) {
-        super(arg0);
-    }
-    
-    /**
-     * @see TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-    
-    /**
-     * @see TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-    
+public class RegexUtilTest  {
+
+
+    @Test
     public void testEncodingEmail() {
         // test mailto: escaping
         String test = "test <a href='mailto:this@email.com'>email</a> string";
@@ -64,7 +37,8 @@
         //System.out.println(result);
         assertEquals(expect, result);
     }
-    
+
+    @Test
     public void testObfuscateEmail() {
         // test "plaintext" escaping
         String test = "this@email.com";
@@ -72,7 +46,8 @@
         String result = RegexUtil.encodeEmail(test);
         assertEquals(expect, result);
     }
-    
+
+    @Test
     public void testHexEmail() {
         // test hex & obfuscate together
         String test = "test <a href='mailto:this@email.com'>this@email.com</a> string, and this@email.com";
@@ -81,9 +56,5 @@
         //System.out.println(result);
         assertEquals(expect, result);
     }
-    
-    public static Test suite() {
-        return new TestSuite(RegexUtilTest.class);
-    }
 
 }
diff --git a/app/src/test/java/org/apache/roller/util/UtilitiesTestSuite.java b/app/src/test/java/org/apache/roller/util/UtilitiesTestSuite.java
deleted file mode 100644
index f3b6fd3..0000000
--- a/app/src/test/java/org/apache/roller/util/UtilitiesTestSuite.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.  For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-
-package org.apache.roller.util;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-
-/**
- * Test various utility classes that do not require a database or container.
- */
-public class UtilitiesTestSuite {
-    
-    public static Test suite() {
-
-        TestSuite suite = new TestSuite();
-        
-        suite.addTestSuite(PropertyExpanderTest.class);
-        suite.addTestSuite(RegexUtilTest.class);
-        
-        return suite;
-    }
-    
-}
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/BookmarkTest.java b/app/src/test/java/org/apache/roller/weblogger/business/BookmarkTest.java
index 1a67919..ba2848c 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/BookmarkTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/BookmarkTest.java
@@ -18,26 +18,30 @@
 
 package org.apache.roller.weblogger.business;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.TestUtils;
+import org.apache.roller.weblogger.pojos.User;
+import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogBookmark;
+import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Iterator;
 import java.util.List;
-import junit.framework.TestCase;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.roller.weblogger.WebloggerException;
-import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogBookmark;
-import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.Weblog;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Weblogger Bookmark Management.
  */
-public class BookmarkTest extends TestCase {
+public class BookmarkTest  {
     
     public static Log log = LogFactory.getLog(BookmarkTest.class);
     
@@ -48,6 +52,7 @@
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -62,7 +67,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -79,7 +85,8 @@
         return WebloggerFactory.getWeblogger();
     }
     
-    
+
+    @Test
     public void testBookmarkCRUD() throws Exception {
         
         BookmarkManager bmgr = getRoller().getBookmarkManager();
@@ -151,6 +158,7 @@
     /**
      * Test all bookmark lookup methods.
      */
+    @Test
     public void _testBookmarkLookups() throws Exception {
         
         BookmarkManager bmgr = getRoller().getBookmarkManager();
@@ -222,7 +230,7 @@
      * method.  i am leaving this test here for a while just in case we change
      * our minds.
      */
-    public void _testMoveFolderContents() throws Exception {
+    public void testMoveFolderContents() throws Exception {
         BookmarkManager bmgr = getRoller().getBookmarkManager();
         try {        
 
@@ -293,9 +301,8 @@
             TestUtils.endSession(true);
         }
     }
-    
-    
-    public void _testBookmarkImport() throws Exception {
+
+    public void testBookmarkImport() throws Exception {
         
         InputStream fis = this.getClass().getResourceAsStream("/bookmarks.opml");
         getRoller().getBookmarkManager().importBookmarks(
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/CommentTest.java b/app/src/test/java/org/apache/roller/weblogger/business/CommentTest.java
index 4326789..7b5f214 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/CommentTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/CommentTest.java
@@ -18,30 +18,25 @@
 
 package org.apache.roller.weblogger.business;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.TestUtils;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.pojos.*;
+import org.apache.roller.weblogger.pojos.WeblogEntryComment.ApprovalStatus;
+
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.roller.weblogger.WebloggerException;
-import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.CommentSearchCriteria;
-import org.apache.roller.weblogger.pojos.WeblogEntryComment;
-import org.apache.roller.weblogger.pojos.WeblogEntryComment.ApprovalStatus;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
-import org.apache.roller.weblogger.pojos.Weblog;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test Comment related business operations.
  *
  * That includes:
  */
-public class CommentTest extends TestCase {
+public class CommentTest  {
     
     public static Log log = LogFactory.getLog(CommentTest.class);
     
@@ -49,17 +44,7 @@
     Weblog testWeblog = null;
     WeblogEntry testEntry = null;
     
-    
-    public CommentTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(CommentTest.class);
-    }
-    
-    
+
     /**
      * All tests in this suite require a user, weblog, and an entry.
      */
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/CustomTemplateRenditionTest.java b/app/src/test/java/org/apache/roller/weblogger/business/CustomTemplateRenditionTest.java
index ba45b24..4c92b0d 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/CustomTemplateRenditionTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/CustomTemplateRenditionTest.java
@@ -18,21 +18,23 @@
 
 package org.apache.roller.weblogger.business;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.CustomTemplateRendition;
-import org.apache.roller.weblogger.pojos.ThemeTemplate.ComponentType;
 import org.apache.roller.weblogger.pojos.TemplateRendition.RenditionType;
 import org.apache.roller.weblogger.pojos.TemplateRendition.TemplateLanguage;
+import org.apache.roller.weblogger.pojos.ThemeTemplate.ComponentType;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogTemplate;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-public class CustomTemplateRenditionTest extends TestCase {
+import static org.junit.jupiter.api.Assertions.*;
+
+public class CustomTemplateRenditionTest  {
     public static Log log = LogFactory.getLog(CustomTemplateRenditionTest.class);
 
        User testUser = null;
@@ -42,19 +44,10 @@
        CustomTemplateRendition mobileCode = null;
 
 
-       public CustomTemplateRenditionTest(String name) {
-           super(name);
-       }
-
-
-       public static Test suite() {
-           return new TestSuite(CustomTemplateRenditionTest.class);
-       }
-
-
        /**
         * All tests in this suite require a user and a weblog.
         */
+       @BeforeEach
        public void setUp() throws Exception {
 
            // setup weblogger
@@ -78,6 +71,7 @@
            testPage.setWeblog(TestUtils.getManagedWebsite(testWeblog));
        }
 
+       @AfterEach
        public void tearDown() throws Exception {
 
            try {
@@ -96,6 +90,7 @@
        /**
         * Test basic persistence operations ... Create, Update, Delete
         */
+       @Test
        public void testTemplateCRUD() throws Exception {
            WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
 
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java
index d00b5b0..2cfa44d 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java
@@ -17,13 +17,6 @@
  */
 package org.apache.roller.weblogger.business;
 
-import java.io.InputStream;
-import java.util.Map;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
@@ -32,25 +25,25 @@
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.util.RollerMessages;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.InputStream;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test File Management business layer operations.
  */
-public class FileContentManagerTest extends TestCase {
+public class FileContentManagerTest  {
 
     private static Log log = LogFactory.getLog(FileContentManagerTest.class);
     User testUser = null;
     Weblog testWeblog = null;
 
-    public FileContentManagerTest(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        return new TestSuite(FileContentManagerTest.class);
-    }
-
-    @Override
+    @BeforeEach
     public void setUp() throws Exception {
 
         // setup weblogger
@@ -58,7 +51,7 @@
 
     }
 
-    @Override
+    @AfterEach
     public void tearDown() throws Exception {
         PropertiesManager pmgr = WebloggerFactory.getWeblogger().getPropertiesManager();
         Map config = pmgr.getProperties();
@@ -73,6 +66,7 @@
     /**
      * Test simple file save/delete.
      */
+    @Test
     public void testFileCRUD() throws Exception {
 
         try {
@@ -99,9 +93,9 @@
         // File should not exist initially
         try {
             FileContent fileContent = fmgr.getFileContent(testWeblog, "bookmarks-file-id");
-            assertTrue("Non-existant file retrieved without any exception", false);
+            assertTrue(false, "Non-existant file retrieved without any exception");
         } catch (FileNotFoundException e) {
-            assertTrue("Exception thrown for non-existant file as expected", true);
+            assertTrue(true, "Exception thrown for non-existant file as expected");
         }
 
         // store a file
@@ -119,9 +113,9 @@
         // File should not exist after delete
         try {
             FileContent fileContent = fmgr.getFileContent(testWeblog, "bookmarks-file-id");
-            assertTrue("Non-existant file retrieved without any exception", false);
+            assertTrue(false, "Non-existant file retrieved without any exception");
         } catch (FileNotFoundException e) {
-            assertTrue("Exception thrown for non-existant file as expected", true);
+            assertTrue(true, "Exception thrown for non-existant file as expected");
         }
 
         TestUtils.endSession(true);
@@ -134,6 +128,7 @@
      *
      * This should test all conditions where a save should fail.
      */
+    @Test
     public void testCanSave() throws Exception {
 
         try {
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/FolderCRUDTest.java b/app/src/test/java/org/apache/roller/weblogger/business/FolderCRUDTest.java
index d6cf9c1..e4247be 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/FolderCRUDTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/FolderCRUDTest.java
@@ -18,18 +18,23 @@
 
 package org.apache.roller.weblogger.business;
 
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Test basic folder operations.
  */
-public class FolderCRUDTest extends TestCase {
+public class FolderCRUDTest  {
     
     public static Log log = LogFactory.getLog(FolderCRUDTest.class);
     
@@ -40,6 +45,7 @@
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         log.info("BEGIN");
@@ -58,7 +64,8 @@
         
         log.info("END");
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         log.info("BEGIN");
@@ -79,6 +86,7 @@
     /**
      * Test add/modify/remove of folders.
      */
+    @Test
     public void testBasicCRUD() throws Exception {
         
         log.info("BEGIN");
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/FolderFunctionalityTest.java b/app/src/test/java/org/apache/roller/weblogger/business/FolderFunctionalityTest.java
index cb8fee5..1b086f4 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/FolderFunctionalityTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/FolderFunctionalityTest.java
@@ -18,21 +18,25 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.List;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 /**
  * Test folder business functions and lookups.
  */
-public class FolderFunctionalityTest extends TestCase {
+public class FolderFunctionalityTest  {
     
     public static Log log = LogFactory.getLog(FolderFunctionalityTest.class);
     
@@ -42,10 +46,12 @@
     WeblogBookmarkFolder f2 = null;
     WeblogBookmarkFolder f3 = null;
     WeblogBookmarkFolder testFolder = null;
-    
+
+
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         log.info("BEGIN");
@@ -74,6 +80,7 @@
         log.info("END");
     }
     
+    @AfterEach
     public void tearDown() throws Exception {
         
         log.info("BEGIN");
@@ -94,6 +101,7 @@
     /**
      * Test the hasBookmarkFolder() method on Weblog.
      */
+    @Test
     public void testHasFolder() throws Exception {
         
         log.info("BEGIN");
@@ -110,6 +118,7 @@
     /** 
      * Ensure that duplicate folder name will throw WebloggerException 
      */
+    @Test
     public void testUniquenessOfFolderNames() throws Exception {
         
         log.info("BEGIN");
@@ -144,6 +153,7 @@
     /**
      * Test folder lookup by id.
      */
+    @Test
     public void testLookupFolderById() throws Exception {
         
         log.info("BEGIN");
@@ -162,6 +172,7 @@
     /**
      * Test folder lookup by id.
      */
+    @Test
     public void testLookupFolderByName() throws Exception {
         
         log.info("BEGIN");
@@ -184,8 +195,8 @@
         
         log.info("END");
     }
-    
-    
+
+    @Test
     public void testLookupAllFoldersByWeblog() throws Exception {
         
         log.info("BEGIN");
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/HitCountTest.java b/app/src/test/java/org/apache/roller/weblogger/business/HitCountTest.java
index d5f7388..4faa511 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/HitCountTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/HitCountTest.java
@@ -18,43 +18,35 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.Iterator;
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogHitCount;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogHitCount;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.Iterator;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test HitCount related business operations.
  */
-public class HitCountTest extends TestCase {
+public class HitCountTest  {
     
     public static Log log = LogFactory.getLog(HitCountTest.class);
     
     User testUser = null;
     Weblog testWeblog = null;
-    
-    
-    public HitCountTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(HitCountTest.class);
-    }
-    
-    
+
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -69,7 +61,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -86,6 +79,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testHitCountCRUD() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -126,7 +120,7 @@
         assertNull(hitCount);
     }
     
-    
+    @Test
     public void testHitCountLookups() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -164,7 +158,7 @@
         assertNull(hitCount);
     }
     
-    
+    @Test
     public void testIncrementHitCount() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -205,7 +199,7 @@
         assertNull(hitCount);
     }
     
-    
+    @Test
     public void testResetHitCounts() throws Exception {
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
         
@@ -266,7 +260,7 @@
         }
     }
 
-    
+    @Test
     public void testHotWeblogs() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/IndexManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/IndexManagerTest.java
index 37b7183..617f008 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/IndexManagerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/IndexManagerTest.java
@@ -17,44 +17,39 @@
 */
 package org.apache.roller.weblogger.business;
 
-import java.sql.Timestamp;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.roller.util.RollerConstants;
 import org.apache.roller.weblogger.TestUtils;
+import org.apache.roller.weblogger.business.search.IndexManager;
 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
 import org.apache.roller.weblogger.business.search.operations.AddEntryOperation;
 import org.apache.roller.weblogger.business.search.operations.SearchOperation;
-import org.apache.roller.weblogger.business.search.IndexManager;
 import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
-import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogCategory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.pojos.WeblogEntry;
+import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.sql.Timestamp;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test Search Manager business layer operations.
  */
-public class IndexManagerTest extends TestCase {
+public class IndexManagerTest  {
     User testUser = null;
     Weblog testWeblog = null;
     public static Log log = LogFactory.getLog(IndexManagerTest.class);    
 
-    public IndexManagerTest(String name) {
-        super(name);
-    }
-        
-    public static Test suite() {
-        return new TestSuite(IndexManagerTest.class);
-    }
-
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -73,7 +68,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -85,7 +81,8 @@
             throw new Exception("Test teardown failed", ex);
         }
     }
-        
+
+    @Test
     public void testSearch() throws Exception {
         WeblogEntryManager wem = WebloggerFactory.getWeblogger().getWeblogEntryManager();
 
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/MediaFileTest.java b/app/src/test/java/org/apache/roller/weblogger/business/MediaFileTest.java
index 16cf7aa..62eac5e 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/MediaFileTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/MediaFileTest.java
@@ -17,41 +17,28 @@
  */
 package org.apache.roller.weblogger.business;
 
-import java.io.File;
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.jpa.JPAMediaFileManagerImpl;
 import org.apache.roller.weblogger.config.WebloggerConfig;
-import org.apache.roller.weblogger.pojos.MediaFile;
-import org.apache.roller.weblogger.pojos.MediaFileDirectory;
-import org.apache.roller.weblogger.pojos.MediaFileFilter;
+import org.apache.roller.weblogger.pojos.*;
 import org.apache.roller.weblogger.pojos.MediaFileFilter.MediaFileOrder;
 import org.apache.roller.weblogger.pojos.MediaFileFilter.SizeFilterType;
-import org.apache.roller.weblogger.pojos.MediaFileType;
-import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.util.RollerMessages;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.sql.Timestamp;
+import java.util.*;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test media file related business operations.
  */
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class MediaFileTest extends TestCase {
+public class MediaFileTest  {
 
     public static Log log = LogFactory.getLog(MediaFileTest.class);
     // static final String runtimeEnv;
@@ -62,8 +49,6 @@
 
     public void setUp() throws Exception {
         TestUtils.setupWeblogger();
-       // assertEquals(0L, WebloggerFactory.getWeblogger().getWeblogManager()
-       //         .getWeblogCount());
     }
 
     public void tearDown() throws Exception {
@@ -90,7 +75,7 @@
             throw new Exception("Test setup failed", ex);
         }
 
-        /**
+        /*
          * Real test starts here.
          */
         MediaFileManager mfMgr = WebloggerFactory.getWeblogger()
@@ -201,6 +186,7 @@
     /**
      * Test getting list of all directories for a given user.
      */
+    @Test
     public void testGetMediaFileDirectories() throws Exception {
 
         User testUser = null;
@@ -275,6 +261,7 @@
     /**
      * Test deletion of media file
      */
+    @Test
     public void testDeleteMediaFile() throws Exception {
         User testUser;
         Weblog testWeblog;
@@ -345,6 +332,7 @@
     /**
      * Test creation of media file.
      */
+    @Test
     public void testCreateMediaFile() throws Exception {
 
         User testUser;
@@ -400,6 +388,7 @@
     /**
      * Test searching media file.
      */
+    @Test
     public void testSearchMediaFile() throws Exception {
         User testUser = null;
         Weblog testWeblog = null;
@@ -624,6 +613,7 @@
     /**
      * Test searching media file with paging logic.
      */
+    @Test
     public void testSearchMediaFilePaging() throws Exception {
         User testUser = null;
         Weblog testWeblog = null;
@@ -714,6 +704,7 @@
     /**
      * Test searching media file with paging logic.
      */
+    @Test
     public void testSearchMediaFileOrderBy() throws Exception {
         User testUser = null;
         Weblog testWeblog = null;
@@ -803,6 +794,7 @@
     /**
      * Test media file update
      */
+    @Test
     public void testUpdateMediaFile() throws Exception {
         User testUser = null;
         Weblog testWeblog = null;
@@ -870,6 +862,7 @@
     /**
      * Test media file and directory gets
      */
+    @Test
     public void testGetDirectoryContents() throws Exception {
         User testUser = null;
         Weblog testWeblog = null;
@@ -957,6 +950,7 @@
     /**
      * Test moving files across directories.
      */
+    @Test
     public void testMoveDirectoryContents() throws Exception {
 
         User testUser = null;
@@ -1053,6 +1047,7 @@
         }
     }
 
+    @Test
     public void testStorageUpgrade() throws Exception {
         User testUser = null;
         Weblog testWeblog1 = null;
@@ -1079,18 +1074,18 @@
                     .getMediaFileManager();
             JPAMediaFileManagerImpl mmgr = (JPAMediaFileManagerImpl) mgr;
 
-            assertTrue("Upgrade required", mmgr.isFileStorageUpgradeRequired());
+            assertTrue(mmgr.isFileStorageUpgradeRequired(), "Upgrade required" );
 
             mmgr.upgradeFileStorage();
             TestUtils.endSession(true);
 
-            assertFalse("Upgrade required", mmgr.isFileStorageUpgradeRequired());
+            assertFalse(mmgr.isFileStorageUpgradeRequired(), "Upgrade required" );
 
             // now, let's check to see if migration was successful
 
             MediaFileDirectory root1 = mgr
                     .getDefaultMediaFileDirectory(testWeblog1);
-            assertNotNull("testblog1's mediafile dir exists", root1);
+            assertNotNull(root1, "testblog1's mediafile dir exists" );
             assertNotNull(mgr.getMediaFileByPath(testWeblog1, "/sub1/hawk.jpg"));
             assertNotNull(mgr.getMediaFileByPath(testWeblog1,
                     "/sub2/nasa.jpg"));
@@ -1102,7 +1097,7 @@
 
             MediaFileDirectory root2 = mgr
                     .getDefaultMediaFileDirectory(testWeblog2);
-            assertNotNull("testblog2's mediafile dir exists", root2);
+            assertNotNull(root2, "testblog2's mediafile dir exists");
             assertNotNull(root2.getMediaFile("amsterdam.jpg"));
             assertNotNull(root2.getMediaFile("p47-thunderbolt.jpg"));
             assertNotNull(root2.getMediaFile("rollerwiki.png"));
@@ -1133,7 +1128,7 @@
      * 
      * This test fails but it should not, so Z'ed out not to run.
      */
-    public void ZtestDirectoryDeleteAssociation() throws Exception {
+    public void testDirectoryDeleteAssociation() throws Exception {
 
         User testUser = null;
         Weblog testWeblog = null;
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/PermissionTest.java b/app/src/test/java/org/apache/roller/weblogger/business/PermissionTest.java
index 96ced63..8b5caf5 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/PermissionTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/PermissionTest.java
@@ -17,44 +17,36 @@
 */
 package org.apache.roller.weblogger.business;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogPermission;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test User/Weblog Permissions related business operations.
  */
-public class PermissionTest extends TestCase {
+public class PermissionTest  {
     
     public static Log log = LogFactory.getLog(PermissionTest.class);
     
     User testUser = null;
     Weblog testWeblog = null;
-    
-    
-    public PermissionTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(PermissionTest.class);
-    }
-    
-    
+
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         log.info("BEGIN");
@@ -73,7 +65,8 @@
         
         log.info("END");
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         log.info("BEGIN");
@@ -94,6 +87,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testPermissionsCRUD() throws Exception {
         
         log.info("BEGIN");
@@ -172,6 +166,7 @@
     /**
      * Test lookup mechanisms.
      */
+    @Test
     public void testPermissionsLookups() throws Exception {
         
         log.info("BEGIN");
@@ -238,6 +233,7 @@
     /**
      * Tests weblog invitation process.
      */
+    @Test
     public void testInvitations() throws Exception {
         
         log.info("BEGIN");
@@ -300,6 +296,7 @@
     /**
      * Tests weblog invitation process.
      */
+    @Test
     public void testPermissionChecks() throws Exception {
         
         log.info("BEGIN");
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/PingsTest.java b/app/src/test/java/org/apache/roller/weblogger/business/PingsTest.java
index 11fcbde..62364b1 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/PingsTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/PingsTest.java
@@ -23,11 +23,6 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.ArrayList;
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
@@ -37,12 +32,19 @@
 import org.apache.roller.weblogger.pojos.PingTarget;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test Pings related business operations.
  */
-public class PingsTest extends TestCase {
+public class PingsTest  {
     
     public static Log log = LogFactory.getLog(PingsTest.class);
     
@@ -50,20 +52,11 @@
     Weblog testWeblog = null;
     PingTarget testCommonPing = null;
 
-    
-    public PingsTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(PingsTest.class);
-    }
-    
-    
+
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -82,7 +75,8 @@
         testCommonPing.setName("testCommonPing");
         testCommonPing.setPingUrl("http://localhost/testCommonPing");
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -101,6 +95,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete
      */
+    @Test
     public void testPingTargetCRUD() throws Exception {
         
         PingTargetManager mgr = WebloggerFactory.getWeblogger().getPingTargetManager();
@@ -146,6 +141,7 @@
     /**
      * Test lookup mechanisms ... id, all common for weblog
      */
+    @Test
     public void testPingTargetLookups() throws Exception {
         
         PingTargetManager mgr = WebloggerFactory.getWeblogger().getPingTargetManager();
@@ -179,6 +175,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete
      */
+    @Test
     public void testAutoPingCRUD() throws Exception {
         
         AutoPingManager mgr = WebloggerFactory.getWeblogger().getAutopingManager();
@@ -232,6 +229,7 @@
     /**
      * Test special ping target removal methods ... by weblog/target, collection, all
      */
+    @Test
     public void testPingTargetRemovals() throws Exception {
         
         AutoPingManager mgr = WebloggerFactory.getWeblogger().getAutopingManager();
@@ -306,6 +304,7 @@
     /**
      * Test lookup mechanisms ... id, ping target, weblog
      */
+    @Test
     public void testAutoPingLookups() throws Exception {
         
         AutoPingManager mgr = WebloggerFactory.getWeblogger().getAutopingManager();
@@ -352,19 +351,5 @@
         TestUtils.teardownPingTarget(pingTarget.getId());
         TestUtils.endSession(true);
     }
-    
-    
-    public void testApplicableAutoPings() throws Exception {
-        
-    }
-    
-    
-    /**
-     * Test that we can properly remove a ping target when it has
-     * associated elements like auto pings and ping queue entries.
-     */
-    public void testRemoveLoadedPingTarget() throws Exception {
-        // TODO: implement this test
-    }
-    
+
 }
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/PlanetManagerLocalTest.java b/app/src/test/java/org/apache/roller/weblogger/business/PlanetManagerLocalTest.java
index 668a372..deaaf23 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/PlanetManagerLocalTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/PlanetManagerLocalTest.java
@@ -15,45 +15,45 @@
  */
 package org.apache.roller.weblogger.business;
 
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.business.PlanetManager;
 import org.apache.roller.planet.pojos.Planet;
 import org.apache.roller.planet.pojos.PlanetGroup;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
-import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
-import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.planet.tasks.RefreshRollerPlanetTask;
 import org.apache.roller.weblogger.planet.tasks.SyncWebsitesTask;
+import org.apache.roller.weblogger.pojos.User;
+import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogEntry;
+import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+
+import static junit.framework.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 
 /**
  * Test database implementation of PlanetManager for local feeds.
  * @author Dave Johnson
  */
-public class PlanetManagerLocalTest extends TestCase {
+public class PlanetManagerLocalTest  {
     public static Log log = LogFactory.getLog(PlanetManagerLocalTest.class);
     
     User testUser = null;
     Weblog testWeblog = null;
-    
-    public static void main(String[] args) {
-        TestRunner.run(PlanetManagerLocalTest.class);
-    }
-    
+
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         try {
@@ -112,7 +112,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -124,7 +125,8 @@
             throw new Exception("Test teardown failed", ex);
         }
     }
-    
+
+    @Test
     public void testRefreshEntries() {
         try {      
             PlanetManager planet = WebloggerFactory.getWeblogger().getPlanetManager();
@@ -152,11 +154,6 @@
             fail();
         }
     }
-    
-    public static Test suite() {
-        return new TestSuite(PlanetManagerLocalTest.class);
-    }
-    
-    
+
 }
 
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/PropertiesTest.java b/app/src/test/java/org/apache/roller/weblogger/business/PropertiesTest.java
index e5c2729..0ed3b8c 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/PropertiesTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/PropertiesTest.java
@@ -18,43 +18,37 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.Map;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test Properties related business operations.
  */
-public class PropertiesTest extends TestCase {
+public class PropertiesTest  {
     
     public static Log log = LogFactory.getLog(PropertiesTest.class);
-    
-    
-    public PropertiesTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(PropertiesTest.class);
-    }
-    
-    
+
+    @BeforeEach
     public void setUp() throws Exception {
         // setup weblogger
         TestUtils.setupWeblogger();
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
     }
-    
-    
+
+
+    @Test
     public void testProperiesCRUD() throws Exception {
         
         // remember, the properties table is initialized during Roller startup
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/SQLScriptRunnerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/SQLScriptRunnerTest.java
index bc20dc8..90de2a3 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/SQLScriptRunnerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/SQLScriptRunnerTest.java
@@ -18,22 +18,28 @@
 
 package org.apache.roller.weblogger.business;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.TestUtils;
+import org.apache.roller.weblogger.business.startup.SQLScriptRunner;
+import org.apache.roller.weblogger.business.startup.WebloggerStartup;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import junit.framework.TestCase;
-import org.apache.roller.weblogger.business.startup.WebloggerStartup;
-import org.apache.roller.weblogger.business.startup.SQLScriptRunner;
-import org.apache.roller.weblogger.TestUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test parsing and running of SQL scripts
  */
-public class SQLScriptRunnerTest extends TestCase {
+public class SQLScriptRunnerTest  {
     public static Log log = LogFactory.getLog(SQLScriptRunnerTest.class);
 
+    @BeforeEach
     public void setUp() {
         try {
             TestUtils.setupWeblogger();
@@ -42,7 +48,8 @@
         }
     }
 
-    public void testParseOnly() throws Exception {        
+    @Test
+    public void testParseOnly() throws Exception {
         DatabaseProvider dbp = WebloggerStartup.getDatabaseProvider();
         Connection con = dbp.getConnection(); 
         
@@ -59,8 +66,9 @@
         SQLScriptRunner runner = new SQLScriptRunner(scriptPath);
         assertTrue(runner != null);
         assertTrue(runner.getCommandCount() == 5);        
-    }    
-    
+    }
+
+    @Test
     public void testSimpleRun() throws Exception {
         DatabaseProvider dbp = WebloggerStartup.getDatabaseProvider();
         Connection con = dbp.getConnection(); 
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/TaskLockTest.java b/app/src/test/java/org/apache/roller/weblogger/business/TaskLockTest.java
index 16d391b..d0ac746 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/TaskLockTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/TaskLockTest.java
@@ -18,39 +18,31 @@
 
 package org.apache.roller.weblogger.business;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.business.runnable.RollerTask;
 import org.apache.roller.weblogger.business.runnable.ThreadManager;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test TaskLock related business operations.
  */
-public class TaskLockTest extends TestCase {
+public class TaskLockTest  {
     
     public static Log log = LogFactory.getLog(TaskLockTest.class);
-    
-    
-    public TaskLockTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(TaskLockTest.class);
-    }
-    
-    
+
+    @BeforeEach
     public void setUp() throws Exception {
         // setup weblogger
         TestUtils.setupWeblogger();
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
     }
     
@@ -59,6 +51,7 @@
      * Test basic persistence operations ... Create, Update, Delete.
      * @throws Exception if one is raised
      */
+    @Test
     public void testTaskLockCRUD() throws Exception {
         
         ThreadManager mgr = WebloggerFactory.getWeblogger().getThreadManager();
@@ -68,22 +61,22 @@
         task.init();
         
         // try to acquire a lock
-        assertTrue("Failed to acquire lease.",mgr.registerLease(task));
+        assertTrue(mgr.registerLease(task), "Failed to acquire lease.");
         // We don't flush here because registerLease should flush on its own
         TestUtils.endSession(false);
         
         // make sure task is locked
-        assertFalse("Acquired lease a second time when we shouldn't have been able to.",mgr.registerLease(task));
+        assertFalse(mgr.registerLease(task),"Acquired lease a second time when we shouldn't have been able to.");
         TestUtils.endSession(false);
         
         // try to release a lock
-        assertTrue("Release of lease failed.",mgr.unregisterLease(task));
+        assertTrue(mgr.unregisterLease(task), "Release of lease failed.");
         // We don't flush here because unregisterLease should flush on its own
         TestUtils.endSession(false);
 
         // Current unregisterLease semantics are idempotent.  Double release should
         // actually succeed.
-        assertTrue("Second release failed.", mgr.unregisterLease(task));
+        assertTrue( mgr.unregisterLease(task), "Second release failed.");
         TestUtils.endSession(false);
     }
     
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java
index e7bb9c8..b4584c4 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/ThemeManagerTest.java
@@ -19,34 +19,30 @@
 package org.apache.roller.weblogger.business;
 
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.themes.ThemeManager;
-import org.apache.roller.weblogger.pojos.*;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-public class ThemeManagerTest extends TestCase {
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class ThemeManagerTest  {
     public static Log log = LogFactory.getLog(ThemeManagerTest.class);
 
-    public ThemeManagerTest(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        return new TestSuite(CustomTemplateRenditionTest.class);
-    }
-
-
+    @BeforeEach
     public void setUp() throws Exception {
         TestUtils.setupWeblogger();
     }
 
+    @AfterEach
     public void tearDown() throws Exception {
     }
 
+    @Test
     public void testThemeAssumptions() throws Exception {
 
         ThemeManager themeManager = WebloggerFactory.getWeblogger().getThemeManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/UserTest.java b/app/src/test/java/org/apache/roller/weblogger/business/UserTest.java
index b1e20fb..b06d7c6 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/UserTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/UserTest.java
@@ -18,40 +18,34 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.config.WebloggerConfig;
 import org.apache.roller.weblogger.pojos.User;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test User related business operations.
  */
-public class UserTest extends TestCase {
+public class UserTest  {
     
     public static Log log = LogFactory.getLog(UserTest.class);
-    
-    
-    public UserTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(UserTest.class);
-    }
-    
-    
+
+
+    @BeforeEach
     public void setUp() throws Exception {
         // setup weblogger
         TestUtils.setupWeblogger();
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
     }
     
@@ -59,6 +53,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testUserCRUD() throws Exception {
         
         UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
@@ -117,6 +112,7 @@
     /**
      * Test lookup mechanisms.
      */
+    @Test
     public void testUserLookups() throws Exception {
         
         UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
@@ -171,6 +167,7 @@
     /**
      * Test basic user role persistence ... Add, Remove
      */
+    @Test
     public void testRoleCRUD() throws Exception {
         
         UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();
@@ -234,12 +231,4 @@
         TestUtils.endSession(true);
     }
 
-    
-    /**
-     * Test ability to remove a user with a full set of data.
-     */
-    public void testRemoveLoadedUser() throws Exception {
-        // TODO: implement testRemoveLoadedUser
-    }
-    
 }
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryCRUDTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryCRUDTest.java
index ad7a879..d48fc2c 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryCRUDTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryCRUDTest.java
@@ -18,19 +18,22 @@
 
 package org.apache.roller.weblogger.business;
 
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogCategory;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogCategory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test WeblogCategory CRUD actions.
  */
-public class WeblogCategoryCRUDTest extends TestCase {
+public class WeblogCategoryCRUDTest  {
     
     public static Log log = LogFactory.getLog(WeblogCategoryCRUDTest.class);
     
@@ -41,6 +44,7 @@
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() {
         
         log.info("BEGIN");
@@ -58,7 +62,8 @@
         
         log.info("END");
     }
-    
+
+    @AfterEach
     public void tearDown() {
         
         log.info("BEGIN");
@@ -78,6 +83,7 @@
     /**
      * Test WeblogCategory.equals() method.
      */
+    @Test
     public void testWeblogCategoryEquality() throws Exception {
         
         log.info("BEGIN");
@@ -99,6 +105,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testBasicCRUD() throws Exception {
         
         log.info("BEGIN");
@@ -159,6 +166,7 @@
     /**
      * Make sure that deleting a category deletes all child categories.
      */
+    @Test
     public void testCategoryCascadingDelete() throws Exception {
         
         log.info("BEGIN");
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryFunctionalityTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryFunctionalityTest.java
index f7b2f7f..cc2837d 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryFunctionalityTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogCategoryFunctionalityTest.java
@@ -18,22 +18,26 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.List;
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.User;
+import org.apache.roller.weblogger.pojos.Weblog;
 import org.apache.roller.weblogger.pojos.WeblogCategory;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
 import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
-import org.apache.roller.weblogger.pojos.Weblog;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test Weblog Category related business operations.
  */
-public class WeblogCategoryFunctionalityTest extends TestCase {
+public class WeblogCategoryFunctionalityTest  {
     
     public static Log log = LogFactory.getLog(WeblogCategoryFunctionalityTest.class);
     
@@ -48,6 +52,7 @@
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() {
         
         log.info("BEGIN");
@@ -74,7 +79,8 @@
         
         log.info("END");
     }
-    
+
+    @AfterEach
     public void tearDown() {
         
         log.info("BEGIN");
@@ -93,6 +99,7 @@
     /**
      * Test the hasCategory() method on WeblogCategory.
      */
+    @Test
     public void testHasCategory() throws Exception {
         
         log.info("BEGIN");
@@ -107,6 +114,7 @@
     /**
      * Lookup category by id.
      */
+    @Test
     public void testLookupCategoryById() throws Exception {
         
         log.info("BEGIN");
@@ -124,6 +132,7 @@
     /**
      * Lookup category by name.
      */
+    @Test
     public void testLookupCategoryByName() throws Exception {
         
         log.info("BEGIN");
@@ -151,6 +160,7 @@
     /**
      * Lookup all categories for a weblog.
      */
+    @Test
     public void testLookupAllCategoriesByWeblog() throws Exception {
         
         log.info("BEGIN");
@@ -168,6 +178,7 @@
     /**
      * Test moving entries in category to new category.
      */
+    @Test
     public void testMoveWeblogCategoryContents() throws Exception {
         log.info("BEGIN");
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogEntryTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogEntryTest.java
index 78eaeb3..9900efc 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogEntryTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogEntryTest.java
@@ -18,56 +18,37 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogEntryComment;
-import org.apache.roller.weblogger.pojos.TagStat;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogCategory;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
+import org.apache.roller.weblogger.pojos.*;
 import org.apache.roller.weblogger.pojos.WeblogEntry.PubStatus;
-import org.apache.roller.weblogger.pojos.WeblogEntrySearchCriteria;
-import org.apache.roller.weblogger.pojos.WeblogEntryTag;
-import org.apache.roller.weblogger.pojos.Weblog;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.sql.Timestamp;
+import java.util.*;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test WeblogEntry related business operations.
  */
-public class WeblogEntryTest extends TestCase {
+public class WeblogEntryTest  {
     
     public static Log log = LogFactory.getLog(WeblogEntryTest.class);
     
     User testUser = null;
     Weblog testWeblog = null;
-    
-    
-    public WeblogEntryTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(WeblogEntryTest.class);
-    }
-    
+
     
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
 
         // setup weblogger
@@ -89,7 +70,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -106,6 +88,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testWeblogEntryCRUD() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -157,6 +140,7 @@
     /**
      * Test lookup mechanisms ... 
      */
+    @Test
     public void testWeblogEntryLookups() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -326,6 +310,7 @@
     /**
      * Test that the createAnchor() method actually ensures unique anchors.
      */
+    @Test
     public void testCreateAnchor() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -355,6 +340,7 @@
         TestUtils.endSession(true);
     }
 
+    @Test
     public void testCreateAnEntryWithTagsShortcut() throws Exception {
         try {
             WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -404,7 +390,8 @@
             log.info(sw.toString());
         }
     }
-        
+
+    @Test
     public void testAddMultipleTags() throws Exception {
 
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -431,7 +418,8 @@
         TestUtils.teardownWeblogEntry(id);
         TestUtils.endSession(true);
     }
-    
+
+    @Test
     public void testAddMultipleIdenticalTags() throws Exception {
 
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -456,8 +444,9 @@
         // teardown our test entry
         TestUtils.teardownWeblogEntry(id);
         TestUtils.endSession(true);
-    }    
+    }
 
+    @Test
     public void testRemoveTagsViaShortcut() throws Exception {
         try {
             WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -496,7 +485,8 @@
             log.info(sw.toString());
         }
     }
-    
+
+    @Test
     public void testTagsExist() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -546,7 +536,8 @@
         TestUtils.teardownWeblog(wid);
         TestUtils.endSession(true);
     }
-    
+
+    @Test
     public void testGetEntriesByTag() throws Exception {
         try {
             WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -582,8 +573,9 @@
             log.info(sw.toString());
         }
     }
-        
 
+
+    @Test
     public void testRemoveEntryTagCascading() throws Exception {
 
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -617,8 +609,9 @@
 
         // terminate
         TestUtils.endSession(true);
-    } 
-    
+    }
+
+    @Test
     public void testUpdateTags() throws Exception {
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
 
@@ -662,6 +655,7 @@
      * 
      * @throws Exception
      */
+    @Test
      public void testUpdateTagTime() throws Exception {
          WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
 
@@ -710,6 +704,7 @@
         TestUtils.endSession(true);
     }
 
+    @Test
     public void testTagAggregates() throws Exception {
         log.info("BEGIN");
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -818,8 +813,7 @@
                 }
                 Integer expectedCount =
                         expectedWeblogTags.get(stat.getName());
-                assertEquals(stat.getName(),
-                        expectedCount.intValue(), stat.getCount());
+                assertEquals(expectedCount.intValue(), stat.getCount(), stat.getName());
             }
 
             tags = mgr.getTags(null, null, null, 0, -1);
@@ -837,7 +831,7 @@
                     fail("Unexpected tagName.");
                 }
                 Integer expectedCount = expectedSiteTags.get(stat.getName());
-                assertEquals(stat.getName(), expectedCount.intValue(), stat.getCount());
+                assertEquals( expectedCount.intValue(), stat.getCount(), stat.getName());
             }
 
             TestUtils.teardownWeblog(testWeblog2.getId());
@@ -854,6 +848,7 @@
         log.info("END");
     }
 
+    @Test
     public void testTagAggregatesCaseSensitivity() throws Exception {
 
         Weblog testWeblog2 = TestUtils.setupWeblog("entryTestWeblog2",
@@ -938,6 +933,7 @@
     /**
      * Test that we can add and remove entry attributes for an entry.
      */
+    @Test
      public void testEntryAttributeCRUD() throws Exception {
         
         WeblogEntryManager emgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
@@ -999,8 +995,9 @@
         entry = emgr.getWeblogEntry(id);
         assertNull(entry);
     }
-    
-    
+
+
+    @Test
     public void testWeblogStats() throws Exception {
 
         WeblogEntryManager emgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogPageTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogPageTest.java
index 5b633b4..8b80fe2 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogPageTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogPageTest.java
@@ -18,44 +18,39 @@
 
 package org.apache.roller.weblogger.business;
 
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.ThemeTemplate.ComponentType;
 import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogTemplate;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogTemplate;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.util.List;
+
+import static junit.framework.TestCase.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Test Weblog Page related business operations.
  */
-public class WeblogPageTest extends TestCase {
+public class WeblogPageTest  {
     
     public static Log log = LogFactory.getLog(WeblogPageTest.class);
     
     User testUser = null;
     Weblog testWeblog = null;
     WeblogTemplate testPage = null;
-    
-    
-    public WeblogPageTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(WeblogPageTest.class);
-    }
-    
+
     
     /**
      * All tests in this suite require a user and a weblog.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -78,7 +73,8 @@
         testPage.setLastModified(new java.util.Date());
         testPage.setWeblog(TestUtils.getManagedWebsite(testWeblog));
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -97,6 +93,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete
      */
+    @Test
     public void testTemplateCRUD() throws Exception {
         
         WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
@@ -135,6 +132,7 @@
     /**
      * Test lookup mechanisms ... id, name, link, weblog
      */
+    @Test
     public void testPermissionsLookups() throws Exception {
         
         WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogStatsTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogStatsTest.java
index 6ce3ec9..c52ec69 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogStatsTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogStatsTest.java
@@ -1,20 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
 package org.apache.roller.weblogger.business;
 
+import org.apache.roller.util.RollerConstants;
+import org.apache.roller.weblogger.TestUtils;
+import org.apache.roller.weblogger.pojos.*;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import java.util.List;
 import java.util.Map;
-import junit.framework.TestCase;
-import org.apache.roller.util.RollerConstants;
-import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.WeblogEntryComment;
-import org.apache.roller.weblogger.pojos.StatCount;
-import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
-import org.apache.roller.weblogger.pojos.Weblog;
 
-/**
- *
- */
-public class WeblogStatsTest extends TestCase {
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class WeblogStatsTest  {
     
     private User user1, user2;
     
@@ -28,10 +45,9 @@
     private Weblog website2;
         private WeblogEntry entry21;
             private WeblogEntryComment comment21; 
-    
-    public WeblogStatsTest() {
-    }  
-    protected void setUp() throws Exception {
+
+    @BeforeEach
+    public void setUp() throws Exception {
         // create weblog with three entries and two comments per entry
         user1 = TestUtils.setupUser("a_commentCountTestUser");
         user2 = TestUtils.setupUser("b_commentCountTestUser");
@@ -53,6 +69,8 @@
 
         Thread.sleep(RollerConstants.SEC_IN_MS);
     }
+
+    @Test
     public void testGetMostCommentedWeblogs() throws Exception {        
         WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();     
         List list = mgr.getMostCommentedWeblogs(null, null, 0, -1);  
@@ -70,6 +88,8 @@
         assertEquals(website2.getId(), s2.getSubjectId());
         assertEquals(1L, s2.getCount());   
     }
+
+    @Test
     public void testGetMostCommentedWeblogEntries() throws Exception {
         
         WeblogEntryManager mgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();      
@@ -86,6 +106,8 @@
         StatCount s2 = (StatCount)list.get(1);
         assertEquals(1L, s2.getCount());   
     }
+
+    @Test
     public void testGetUserNameLetterMap() throws Exception {        
         UserManager mgr = WebloggerFactory.getWeblogger().getUserManager();      
         Map map = mgr.getUserNameLetterMap();    
@@ -93,6 +115,8 @@
         assertNotNull(map.get("B"));
         assertNotNull(map.get("C"));
     }
+
+    @Test
     public void testGetWeblogLetterMap() throws Exception {        
         WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
         Map map = mgr.getWeblogHandleLetterMap();    
@@ -100,7 +124,9 @@
         assertNotNull(map.get("B"));
         assertNotNull(map.get("C"));
     }
-    protected void tearDown() throws Exception {
+
+    @AfterEach
+    public void tearDown() throws Exception {
         
         // TODO: ATLAS figure out why comments must be torn down first
         TestUtils.teardownComment(comment11.getId());
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/WeblogTest.java b/app/src/test/java/org/apache/roller/weblogger/business/WeblogTest.java
index ca4cb29..e3cfdbc 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/WeblogTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/WeblogTest.java
@@ -17,41 +17,33 @@
 */
 package org.apache.roller.weblogger.business;
 
-import java.util.List;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
-import org.apache.roller.weblogger.pojos.StatCount;
 import org.apache.roller.weblogger.pojos.User;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 
 /**
  * Test Weblog related business operations.
  */
-public class WeblogTest extends TestCase {
+public class WeblogTest  {
     
     public static Log log = LogFactory.getLog(WeblogTest.class);
     
     User testUser = null;
     
-    
-    public WeblogTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(WeblogTest.class);
-    }
-    
-    
     /**
      * All tests in this suite require a user.
      */
+    @BeforeEach
     public void setUp() throws Exception {
         
         log.info("BEGIN");
@@ -69,7 +61,8 @@
         
         log.info("END");
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         log.info("BEGIN");
@@ -89,6 +82,7 @@
     /**
      * Test basic persistence operations ... Create, Update, Delete.
      */
+    @Test
     public void testWeblogCRUD() throws Exception {
         
         log.info("BEGIN");
@@ -159,6 +153,7 @@
     /**
      * Test lookup mechanisms.
      */
+    @Test
     public void testWeblogLookups() throws Exception {
         
         log.info("BEGIN");
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java
index d94d5b3..0b2ab39 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/jpa/JPAOAuthManagerTest.java
@@ -18,21 +18,25 @@
 
 package org.apache.roller.weblogger.business.jpa;
 
-import junit.framework.TestCase;
 import net.oauth.OAuthAccessor;
 import net.oauth.OAuthConsumer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test Weblogger Bookmark Management.
  */
-public class JPAOAuthManagerTest extends TestCase {    
+public class JPAOAuthManagerTest  {
     public static Log log = LogFactory.getLog(JPAOAuthManagerTest.class);
 
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -45,7 +49,8 @@
             throw new Exception("Test setup failed", ex);
         }
     }
-    
+
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -56,6 +61,7 @@
         }
     }
 
+    @Test
     public void testCRUD() throws Exception {
         JPAOAuthManagerImpl omgr = (JPAOAuthManagerImpl)
             WebloggerFactory.getWeblogger().getOAuthManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/business/plugins/CommentPluginsTest.java b/app/src/test/java/org/apache/roller/weblogger/business/plugins/CommentPluginsTest.java
index ec4b000..1166a05 100644
--- a/app/src/test/java/org/apache/roller/weblogger/business/plugins/CommentPluginsTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/business/plugins/CommentPluginsTest.java
@@ -18,30 +18,35 @@
 
 package org.apache.roller.weblogger.business.plugins;
 
-import junit.framework.TestCase;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
 import org.apache.roller.weblogger.pojos.WeblogEntryComment;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test comment plugins.
  */
-public class CommentPluginsTest extends TestCase {
+public class CommentPluginsTest  {
 
     private String convertLinesStart = "paragraph1\n\nparagraph2\nline2\nline3\n\nparagraph3";
     private String convertLinesFormatted = "\n<p>paragraph1</p>\n\n\n<p>paragraph2<br/>\nline2<br/>\nline3</p>\n\n\n<p>paragraph3</p>\n\n";
     
-    
-    protected void setUp() throws Exception {
+
+    @BeforeEach
+    public void setUp() throws Exception {
         TestUtils.setupWeblogger();
     }
-    
-    protected void tearDown() throws Exception {
+
+    @AfterEach
+    public void tearDown() throws Exception {
         // no-op
     }
     
-    
+    @Test
     public void testAutoFormatPlugin() {
         
         PluginManager pmgr = WebloggerFactory.getWeblogger().getPluginManager();
diff --git a/app/src/test/java/org/apache/roller/weblogger/planet/business/WebloggerRomeFeedFetcherTest.java b/app/src/test/java/org/apache/roller/weblogger/planet/business/WebloggerRomeFeedFetcherTest.java
index f544031..52a01eb 100644
--- a/app/src/test/java/org/apache/roller/weblogger/planet/business/WebloggerRomeFeedFetcherTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/planet/business/WebloggerRomeFeedFetcherTest.java
@@ -18,19 +18,22 @@
 
 package org.apache.roller.weblogger.planet.business;
 
-import junit.framework.TestCase;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.planet.business.fetcher.FeedFetcher;
 import org.apache.roller.planet.pojos.Subscription;
 import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test custom weblogger feed fetcher.
  */
-public class WebloggerRomeFeedFetcherTest extends TestCase {
+public class WebloggerRomeFeedFetcherTest  {
     
     public static Log log = LogFactory.getLog(WebloggerRomeFeedFetcherTest.class);
     
@@ -42,7 +45,7 @@
     /**
      * All tests in this suite require a user and a weblog.
      */
-    @Override
+    @BeforeEach
     public void setUp() throws Exception {
         
         // setup weblogger
@@ -58,7 +61,7 @@
         }
     }
     
-    @Override
+    @AfterEach
     public void tearDown() throws Exception {
         
         try {
@@ -72,7 +75,7 @@
         }
     }
     
-    
+    @Test
     public void testFetchSubscription() throws Exception {
         try {
             FeedFetcher feedFetcher = WebloggerFactory.getWeblogger().getFeedFetcher();
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/ApplicationResourcesTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/ApplicationResourcesTest.java
index 35dbddd..e52e22a 100644
--- a/app/src/test/java/org/apache/roller/weblogger/ui/ApplicationResourcesTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/ui/ApplicationResourcesTest.java
@@ -22,13 +22,13 @@
  */
 package org.apache.roller.weblogger.ui;
 
+import org.junit.jupiter.api.BeforeEach;
+
 import java.io.FileInputStream;
 import java.util.Properties;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 
 /**
@@ -47,33 +47,12 @@
  * @author <a href="mailto:molen@mail.com">Jaap van der Molen</a>
  * @version $Revision: 1.7 $
  */
-public class ApplicationResourcesTest extends TestCase
-{
+public class ApplicationResourcesTest {
 	//private String userDir = null;
 	private Properties baseProps = null; 
 
-	/**
-	 * @param name
-	 */
-	public ApplicationResourcesTest(String name)
-	{
-		super(name);
-	}
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite();
-//		suite.addTest(new ApplicationResourcesTest("testSystemProperties"));
-//		suite.addTest(
-//			new ApplicationResourcesTest("testApplicationResources_zh_cn"));
-		return suite;
-	}
-	
-	/**
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	protected void setUp() throws Exception
-	{
-		super.setUp();
+	@BeforeEach
+	public void setUp() throws Exception {
 		//userDir = System.getProperty("user.dir");
 		
 		// load base ApplicationResources.properties file
@@ -84,16 +63,12 @@
 
 	/**
 	 * Test Simple Chinese stuff.
-	 * 
-	 * @throws Exception
 	 */
-	public void _testApplicationResources_zh_cn() throws Exception
-	{
+	public void testApplicationResources_zh_cn() throws Exception {
 		verifyResourceBundle("ApplicationResources_zh_cn");
 	}
 
-    public void testSystemProperties()
-    {
+    public void testSystemProperties() {
         Properties sysProps = System.getProperties();
         for (Object key : sysProps.keySet()) {
             System.out.println(key + " = " + sysProps.getProperty((String)key));
@@ -106,8 +81,7 @@
 	 * @param bundle name of bundle to test
 	 * @throws Exception if file not found, or if io ecxeption occurs.
 	 */
-	private void verifyResourceBundle(String bundle) throws Exception
-	{
+	private void verifyResourceBundle(String bundle) throws Exception {
 		// verify user-dir; should end with roller
 		//assertNotNull(userDir);
 		//assertTrue(userDir.endsWith("roller"));
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/UIPluginManagerTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/UIPluginManagerTest.java
index 3cc3b14..ac87b3c 100644
--- a/app/src/test/java/org/apache/roller/weblogger/ui/UIPluginManagerTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/ui/UIPluginManagerTest.java
@@ -18,37 +18,22 @@
 
 package org.apache.roller.weblogger.ui;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.ui.core.RollerContext;
 import org.apache.roller.weblogger.ui.core.plugins.UIPluginManager;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test Plugin Management business layer operations.
  */
-public class UIPluginManagerTest extends TestCase {
+public class UIPluginManagerTest  {
     
     private static Log log = LogFactory.getLog(UIPluginManagerTest.class);
     
-    
-    public UIPluginManagerTest(String name) {
-        super(name);
-    }
-    
-    
-    public static Test suite() {
-        return new TestSuite(UIPluginManagerTest.class);
-    }
-    
-    
-    public void setUp() throws Exception { }
-    public void tearDown() throws Exception { }
-    
-    
+    @Test
     public void testEntryEditors() throws Exception {
     	log.debug("Start");
         
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/UITestSuite.java b/app/src/test/java/org/apache/roller/weblogger/ui/UITestSuite.java
deleted file mode 100644
index 89abc70..0000000
--- a/app/src/test/java/org/apache/roller/weblogger/ui/UITestSuite.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.  For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-
-package org.apache.roller.weblogger.ui;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.apache.roller.weblogger.planet.business.WebloggerRomeFeedFetcherTest;
-import org.apache.roller.weblogger.ui.rendering.util.CommentValidatorTest;
-
-
-/**
- * Test UI.
- */
-public class UITestSuite {
-    
-    public static Test suite() {
-
-        TestSuite suite = new TestSuite();
-	
-        // comment plugins
-        suite.addTestSuite(CommentValidatorTest.class);
-        
-        // custom planet fetcher
-        suite.addTestSuite(WebloggerRomeFeedFetcherTest.class);
-        
-        return suite;
-    }
-    
-}
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/InitFilterTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/InitFilterTest.java
index 0c7aef4..30f1a3e 100644
--- a/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/InitFilterTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/ui/core/filters/InitFilterTest.java
@@ -18,15 +18,19 @@
 
 package org.apache.roller.weblogger.ui.core.filters;
 
-import junit.framework.TestCase;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 
 /**
  * @author Kohei Nozaki
  */
-public class InitFilterTest extends TestCase {
+public class InitFilterTest  {
 
     private static final String SERVER_NAME = "roller.example.com";
 
+    @Test
     public void testGetAbsoluteUrlOnRootWithHttp() throws Exception {
         boolean secure = false;
         String contextPath = "";
@@ -37,6 +41,7 @@
         assertEquals("http://roller.example.com", absoluteUrl);
     }
 
+    @Test
     public void testGetAbsoluteUrlOnRootWithHttps() throws Exception {
         boolean secure = true;
         String contextPath = "";
@@ -47,6 +52,7 @@
         assertEquals("http://roller.example.com", absoluteUrl);
     }
 
+    @Test
     public void testGetAbsoluteUrlAgainstTop() throws Exception {
         boolean secure = false;
         String contextPath = "/roller";
@@ -57,6 +63,7 @@
         assertEquals("http://roller.example.com/roller", absoluteUrl);
     }
 
+    @Test
     public void testGetAbsoluteUrlAgainstPermalink() throws Exception {
         boolean secure = false;
         String contextPath = "/roller";
@@ -67,6 +74,7 @@
         assertEquals("http://roller.example.com/roller", absoluteUrl);
     }
 
+    @Test
     public void testRemoveTrailingSlash() throws Exception {
         assertEquals("http://www.example.com", InitFilter.removeTrailingSlash("http://www.example.com/"));
         assertEquals("http://www.example.com", InitFilter.removeTrailingSlash("http://www.example.com"));
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/util/CommentValidatorTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/util/CommentValidatorTest.java
index 605c279..a6cd46b 100644
--- a/app/src/test/java/org/apache/roller/weblogger/ui/rendering/util/CommentValidatorTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/ui/rendering/util/CommentValidatorTest.java
@@ -18,30 +18,33 @@
 
 package org.apache.roller.weblogger.ui.rendering.util;
 
-import junit.framework.TestCase;
-import org.apache.roller.weblogger.pojos.WeblogEntryComment;
+import org.apache.roller.weblogger.TestUtils;
 import org.apache.roller.weblogger.pojos.User;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
 import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogEntry;
+import org.apache.roller.weblogger.pojos.WeblogEntryComment;
 import org.apache.roller.weblogger.ui.rendering.plugins.comments.CommentValidationManager;
 import org.apache.roller.weblogger.util.RollerMessages;
-import org.apache.roller.weblogger.TestUtils;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  *
  * @author David M. Johnson
  */
-public class CommentValidatorTest extends TestCase {
+public class CommentValidatorTest  {
     CommentValidationManager mgr = null;
     Weblog        weblog = null;
     User           user = null;
     WeblogEntry    entry = null;
     
-    /** Creates a new instance of CommentValidatorTest */
-    public CommentValidatorTest() {
-    } 
 
-    protected void setUp() throws Exception {
+    @BeforeEach
+    public void setUp() throws Exception {
         // setup weblogger
         TestUtils.setupWeblogger();
         
@@ -57,14 +60,16 @@
 
         TestUtils.endSession(true);
     }
-    
-    protected void tearDown() throws Exception {
+
+    @AfterEach
+    public void tearDown() throws Exception {
         TestUtils.teardownWeblogEntry(entry.getId());
         //TestUtils.teardownWeblogCategory(weblog.getDefaultCategory().getId());
         TestUtils.teardownWeblog(weblog.getId());
         TestUtils.teardownUser(user.getUserName());
     }
-    
+
+    @Test
     public void testExcessSizeCommentValidator() {
         RollerMessages msgs = new RollerMessages();
         WeblogEntryComment comment = createEmptyComment();
@@ -81,7 +86,8 @@
         comment.setContent(sb.toString()); 
         assertTrue(mgr.validateComment(comment, msgs) != 100);
     }
-    
+
+    @Test
     public void testExcessLinksCommentValidator() {
         RollerMessages msgs = new RollerMessages();
         WeblogEntryComment comment = createEmptyComment();
@@ -99,7 +105,8 @@
         ); 
         assertTrue(mgr.validateComment(comment, msgs) != 100);        
     }
-    
+
+    @Test
     public void testBlacklistCommentValidator() {
         RollerMessages msgs = new RollerMessages();
         WeblogEntryComment comment = createEmptyComment();
diff --git a/app/src/test/java/org/apache/roller/weblogger/ui/struts2/util/UIActionTest.java b/app/src/test/java/org/apache/roller/weblogger/ui/struts2/util/UIActionTest.java
index 3866c0b..f804cf1 100644
--- a/app/src/test/java/org/apache/roller/weblogger/ui/struts2/util/UIActionTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/ui/struts2/util/UIActionTest.java
@@ -18,21 +18,14 @@
 
 package org.apache.roller.weblogger.ui.struts2.util;
 
+import org.junit.jupiter.api.Test;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
-public class UIActionTest extends TestCase {
+public class UIActionTest  {
 
-    public UIActionTest() {
-    }
-
-    public static Test suite() {
-        return new TestSuite(UIActionTest.class);
-    }
-
+    @Test
     public void testCleanTextEmpty() {
         assertEquals(null,UIAction.cleanTextKey(null));
         assertEquals("",UIAction.cleanTextKey(""));
@@ -40,6 +33,7 @@
         assertEquals("",UIAction.cleanTextArg(""));
     }
 
+    @Test
     public void testCleanTextKey() {
         assertEquals(null,UIAction.cleanTextKey(null));
         assertEquals("",UIAction.cleanTextKey(""));
@@ -58,6 +52,7 @@
         assertEquals("", UIAction.cleanTextKey("something %{foo} more"));
     }
 
+    @Test
     public void testCleanTextArg() {
         assertEquals("&lt;i&gt;some text&lt;/i&gt;",UIAction.cleanTextArg("<i>some text</i>"));
         assertEquals("&lt;i&gt;some ${text}&lt;/i&gt;",UIAction.cleanTextArg("<i>some ${text}</i>"));
diff --git a/app/src/test/java/org/apache/roller/weblogger/util/BlacklistTest.java b/app/src/test/java/org/apache/roller/weblogger/util/BlacklistTest.java
index 158b740..638ae9d 100644
--- a/app/src/test/java/org/apache/roller/weblogger/util/BlacklistTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/util/BlacklistTest.java
@@ -18,85 +18,72 @@
 
 package org.apache.roller.weblogger.util;
 
-import java.io.File;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Test blacklist functionality.
  */
-public class BlacklistTest extends TestCase {
-    public static Log log =    
-        LogFactory.getLog(BlacklistTest.class);  
+public class BlacklistTest  {
+    public static Log log = LogFactory.getLog(BlacklistTest.class);
     
     private Blacklist blacklist;
     
-      
-    public BlacklistTest() {
-        super();
-    }
-    
-    /**
-     * @param arg0
-     */
-    public BlacklistTest(String arg0) {
-        super(arg0);
-    }
-    
-    /**
-     * @see TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
+    @BeforeEach
+    public void setUp() throws Exception {
         blacklist = Blacklist.getBlacklist();
         String FS = File.separator;
         String blacklistName = System.getProperty("project.build.directory") + FS + "classes" + "blacklist.txt";
         log.info("Processing Blacklist file: " + blacklistName);
         blacklist.loadBlacklistFromFile(blacklistName);
     }
-    
-    /**
-     * @see TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        //System.out.println(blacklist);
+
+    @AfterEach
+    public void tearDown() throws Exception {
     }
-    
+
+    @Test
     public void testIsBlacklisted0() {
         assertFalse(blacklist.isBlacklisted("four score and seven years ago.com"));
     }
     
     // test non-regex
+    @Test
     public void testIsBlacklisted1() {
         assertTrue(blacklist.isBlacklisted("www.myblacklistedsite.com"));
     }
     
     // test the regex patterns
+    @Test
     public void testIsBlacklisted2() {
         assertTrue(blacklist.isBlacklisted("www.lsotr.com"));
     }
     
     // test the regex patterns
+    @Test
     public void testIsBlacklisted3() {
         assertTrue(blacklist.isBlacklisted("buymoreonline.com"));
     }
     
     // test the regex patterns
+    @Test
     public void testIsBlacklisted4() {
         assertTrue(blacklist.isBlacklisted("diet-enlargement.com"));
     }
     
     // test the regex patterns
+    @Test
     public void testIsBlacklisted5() {
         assertTrue(blacklist.isBlacklisted("viagra.com"));
     }
     
-    public static Test suite() {
-        return new TestSuite(BlacklistTest.class);
-    }
-    
+
 }
diff --git a/app/src/test/java/org/apache/roller/weblogger/util/LRUCache2Test.java b/app/src/test/java/org/apache/roller/weblogger/util/LRUCache2Test.java
index 585e1e8..989e35b 100644
--- a/app/src/test/java/org/apache/roller/weblogger/util/LRUCache2Test.java
+++ b/app/src/test/java/org/apache/roller/weblogger/util/LRUCache2Test.java
@@ -18,24 +18,16 @@
 
 package org.apache.roller.weblogger.util;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test LRUCache2.
  */
-public class LRUCache2Test extends TestCase {
-    
-    /**
-     * @see junit.framework.TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        // TODO Auto-generated method stub
-        super.setUp();
-    }
-    
+public class LRUCache2Test  {
+
+    @Test
     public void testTimeout() {
         // Create cache with 100 item limit and 15 second timeout
         TestEnvironment env = new TestEnvironment();
@@ -54,7 +46,8 @@
         assertNull(cache.get("key2"));
         assertNull(cache.get("key3"));
     }
-    
+
+    @Test
     public void testLRU() {
         // Create cache with 3 item limit and 15 second timeout
         TestEnvironment env = new TestEnvironment();
@@ -78,7 +71,8 @@
         cache.put("key4", "string4");
         assertNull(cache.get("key3"));
     }
-    
+
+    @Test
     public void testPurge() {
         // Create cache with 100 item limit and 15 second timeout
         TestEnvironment env = new TestEnvironment();
@@ -99,14 +93,6 @@
         assertEquals(0, cache.size());
     }
     
-    /**
-     * @see junit.framework.TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        // TODO Auto-generated method stub
-        super.tearDown();
-    }
-    
     public static class TestEnvironment implements LRUCache2.Environment {
         public long time = 0;
         public long getCurrentTimeInMillis() {
@@ -114,8 +100,5 @@
         }
     }
     
-    public static Test suite() {
-        return new TestSuite(LRUCache2Test.class);
-    }
-    
+
 }
diff --git a/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java b/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java
index a8bda59..8153864 100644
--- a/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/util/LinkbackExtractorTest.java
@@ -18,42 +18,13 @@
 
 package org.apache.roller.weblogger.util;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.junit.Ignore;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test linkback extractor.
  */
-@Ignore("Until rollerweblogger.org sorts out SSL issues")
-public class LinkbackExtractorTest extends TestCase {
-    
-    /**
-     * Constructor for LinkbackExtractorTest.
-     * @param arg0
-     */
-    public LinkbackExtractorTest(String arg0) {
-        super(arg0);
-    }
+public class LinkbackExtractorTest  {
 
-    public static void main(String[] args) {
-    }
-    
-    /**
-     * @see TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-    
-    /**
-     * @see TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-    
     public void testLinkbackExtractor() throws Exception {
         String[][] testrefs = new String[][]
         {
@@ -76,9 +47,6 @@
 
         // todo: le.getPermalink() and le.getExcerpt() working
     }
-    
-    public static Test suite() {
-        return new TestSuite(LinkbackExtractorTest.class);
-    }
+
     
 }
diff --git a/app/src/test/java/org/apache/roller/weblogger/util/UtilitiesTest.java b/app/src/test/java/org/apache/roller/weblogger/util/UtilitiesTest.java
index 6db7046..2b97d0c 100644
--- a/app/src/test/java/org/apache/roller/weblogger/util/UtilitiesTest.java
+++ b/app/src/test/java/org/apache/roller/weblogger/util/UtilitiesTest.java
@@ -18,62 +18,40 @@
 
 package org.apache.roller.weblogger.util;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Test utilities.
  */
-public class UtilitiesTest extends TestCase {
-    
-    /**
-     * Constructor for LinkbackExtractorTest.
-     * @param arg0
-     */
-    public UtilitiesTest(String arg0) {
-        super(arg0);
-    }
-    
-    public static void main(String[] args) {
-    }
-    
-    /**
-     * @see TestCase#setUp()
-     */
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-    
-    /**
-     * @see TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-    
+public class UtilitiesTest  {
+
+    @Test
     public void testExtractHTML() {
         String test = "<a>keep me</a>";
         String expect = "<a></a>";
         String result = Utilities.extractHTML(test);
         assertEquals(expect, result);
     }
-    
+
+    @Test
     public void testRemoveHTML() {
         String test = "<br><br><p>a <b>bold</b> sentence with a <a href=\"http://example.com\">link</a></p>";
         String expect = "a bold sentence with a link";
         String result = Utilities.removeHTML(test, false);
         assertEquals(expect, result);
     }
-    
+
+    @Test
     public void testTruncateNicely1() {
         String test = "blah blah blah blah blah";
         String expect = "blah blah blah";
         String result = Utilities.truncateNicely(test, 11, 15, "");
         assertEquals(expect, result);
     }
-    
+
+    @Test
     public void testTruncateNicely2() {
         String test = "<p><b>blah1 blah2</b> <i>blah3 blah4 blah5</i></p>";
         String expect = "<p><b>blah1 blah2</b> <i>blah3</i></p>";
@@ -83,6 +61,7 @@
     }
     
     /* broken because it uses UtilitiesModel which is part of .ui.* package
+    @Test
     public void testAddNoFollow() {
         String test1 = "<p>this some text with a <a href=\"http://example.com\">link</a>";
         String expect1 = "<p>this some text with a <a href=\"http://example.com\" rel=\"nofollow\">link</a>";
@@ -96,9 +75,5 @@
      
     }
      */
-    
-    public static Test suite() {
-        return new TestSuite(UtilitiesTest.class);
-    }
-    
+
 }
diff --git a/pom.xml b/pom.xml
index 4188bff..9670bc0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,9 +98,10 @@
     <dependencyManagement>
         <dependencies>
             <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>4.12</version>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-engine</artifactId>
+                <version>5.1.0</version>
+                <scope>test</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>