diff --git a/client/src/test/java/org/apache/oozie/cli/TestCLIParser.java b/client/src/test/java/org/apache/oozie/cli/TestCLIParser.java
index bbb95e2..77c582e 100644
--- a/client/src/test/java/org/apache/oozie/cli/TestCLIParser.java
+++ b/client/src/test/java/org/apache/oozie/cli/TestCLIParser.java
@@ -25,7 +25,7 @@
 import java.io.PrintStream;
 import java.nio.charset.StandardCharsets;
 
-import junit.framework.TestCase;
+
 
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
@@ -34,7 +34,12 @@
 
 import com.google.common.io.ByteStreams;
 
-public class TestCLIParser extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class TestCLIParser {
 
     @Test
     public void testEmptyParser() throws Exception {
diff --git a/client/src/test/java/org/apache/oozie/cli/TestOozieCLIMethods.java b/client/src/test/java/org/apache/oozie/cli/TestOozieCLIMethods.java
index 7202f51..06db6c3 100644
--- a/client/src/test/java/org/apache/oozie/cli/TestOozieCLIMethods.java
+++ b/client/src/test/java/org/apache/oozie/cli/TestOozieCLIMethods.java
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.regex.Pattern;
 
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.client.BulkResponse;
 import org.apache.oozie.client.BundleJob;
@@ -44,7 +44,10 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteStreams;
 
-public class TestOozieCLIMethods extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+
+public class TestOozieCLIMethods {
 
     static final String jobIdPattern = "Job ID[\\s|:]+";
     static final String jobNamePattern = "Job Name[\\s|:]+";
diff --git a/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java b/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java
index 7326778..4d75b37 100644
--- a/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java
+++ b/client/src/test/java/org/apache/oozie/client/rest/TestJsonToBean.java
@@ -26,7 +26,7 @@
 import java.util.Map;
 import java.util.Properties;
 
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.AppType;
 import org.apache.oozie.client.BulkResponse;
@@ -41,7 +41,12 @@
 import org.json.simple.JSONObject;
 import org.json.simple.JSONValue;
 
-public class TestJsonToBean extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class TestJsonToBean {
 
     static String CREATED_TIME = "Thu, 01 Jan 2009 00:00:00 GMT";
     static String START_TIME = "Thu, 01 Jan 2009 00:00:00 GMT";
@@ -86,6 +91,7 @@
         return array;
     }
 
+    @Test
     public void testParseWorkflowAction() {
         JSONObject json = createJsonWorkflowAction();
         WorkflowAction action = JsonToBean.createWorkflowAction(json);
@@ -109,6 +115,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseWorkflowActions() {
         JSONArray array = createJsonWorkflowActionList();
         List<WorkflowAction> list = JsonToBean.createWorkflowActionList(array);
@@ -150,6 +157,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseWorkflowJob() {
         JSONObject json = createJsonWorkflowJob();
         WorkflowJob wf = JsonToBean.createWorkflowJob(json);
@@ -172,6 +180,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseWorkflowJobs() {
         JSONArray array = createJsonWorkflowJobList();
         List<WorkflowJob> list = JsonToBean.createWorkflowJobList(array);
@@ -217,6 +226,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseCoordinatorAction() {
         JSONObject json = createJsonCoordinatorAction();
         CoordinatorAction action = JsonToBean.createCoordinatorAction(json);
@@ -241,6 +251,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseCoordinatorActions() {
         JSONArray array = createJsonCoordinatorActionList();
         List<CoordinatorAction> list = JsonToBean.createCoordinatorActionList(array);
@@ -290,6 +301,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseCoordinatorJob() {
         JSONObject json = createJsonCoordinatorJob();
         CoordinatorJob job = JsonToBean.createCoordinatorJob(json);
@@ -326,6 +338,7 @@
     }
 
     @SuppressWarnings("unchecked")
+    @Test
     public void testParseCoordinatorJobs() {
         JSONArray array = createJsonCoordinatorJobList();
         List<CoordinatorJob> list = JsonToBean.createCoordinatorJobList(array);
@@ -351,6 +364,7 @@
         return json;
     }
 
+    @Test
     public void testParseJMSInfo() {
         JSONObject json = createJMSInfoJSONObject();
         JMSConnectionInfo jmsDetails = JsonToBean.createJMSConnectionInfo(json);
@@ -409,6 +423,7 @@
         return array;
     }
 
+    @Test
     public void testParseBulkResponse() {
         JSONObject json = createJsonBulkResponse();
 
@@ -437,6 +452,7 @@
         assertEquals("action-missingDeps", bulkAction.getMissingDependencies());
     }
 
+    @Test
     public void testParseBulkResponseList() {
         JSONArray array = createJsonBulkResponseList();
         List<BulkResponse> list = JsonToBean.createBulkResponseList(array);
@@ -446,30 +462,37 @@
         assertEquals("cj2", list.get(1).getCoordinator().getId());
     }
 
+    @Test
     public void testWorkflowActionMappings() throws Exception {
         _testMappings(JsonToBean.WF_ACTION, WorkflowAction.class, true);
     }
 
+    @Test
     public void testWorkflowJobMappings() throws Exception {
         _testMappings(JsonToBean.WF_JOB, WorkflowJob.class, true);
     }
 
+    @Test
     public void testCoordActionMappings() throws Exception {
         _testMappings(JsonToBean.COORD_ACTION, CoordinatorAction.class, true);
     }
 
+    @Test
     public void testCoordJobMappings() throws Exception {
         _testMappings(JsonToBean.COORD_JOB, CoordinatorJob.class, true);
     }
 
+    @Test
     public void testBundleJobMappings() throws Exception {
         _testMappings(JsonToBean.BUNDLE_JOB, BundleJob.class, true);
     }
 
+    @Test
     public void testBulkResponseMappings() throws Exception {
         _testMappings(JsonToBean.BULK_RESPONSE, BulkResponse.class, false);
     }
 
+    @Test
     public void testJMSConnectionInfoMappings() throws Exception {
         _testMappings(JsonToBean.JMS_CONNECTION_INFO, JMSConnectionInfoWrapper.class, false);
     }
diff --git a/core/src/test/java/org/apache/oozie/TestActionBean.java b/core/src/test/java/org/apache/oozie/TestActionBean.java
index 0af99f2..4567ec8 100644
--- a/core/src/test/java/org/apache/oozie/TestActionBean.java
+++ b/core/src/test/java/org/apache/oozie/TestActionBean.java
@@ -19,8 +19,7 @@
 package org.apache.oozie;
 
 import org.apache.oozie.client.WorkflowAction;
-import org.apache.oozie.test.XTestCase;
-import org.apache.oozie.WorkflowActionBean;
+import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -28,8 +27,13 @@
 import java.io.DataOutputStream;
 import java.util.Date;
 
-public class TestActionBean extends XTestCase {
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
+public class TestActionBean {
+
+    @Test
     public void testAction() {
         WorkflowActionBean action = new WorkflowActionBean();
         action.setJobId("id");
@@ -64,6 +68,7 @@
         assertEquals("job1,job2", action.getExternalChildIDs());
     }
 
+    @Test
     public void testEmptyWriteRead() throws Exception {
         WorkflowActionBean action = new WorkflowActionBean();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -75,7 +80,4 @@
         action.readFields(dis);
     }
 
-    public void testFullWriteRead() throws Exception {
-        //TODO
-    }
 }
diff --git a/core/src/test/java/org/apache/oozie/TestBundleEngineSimple.java b/core/src/test/java/org/apache/oozie/TestBundleEngineSimple.java
index 90746e8..3bba72d 100644
--- a/core/src/test/java/org/apache/oozie/TestBundleEngineSimple.java
+++ b/core/src/test/java/org/apache/oozie/TestBundleEngineSimple.java
@@ -18,19 +18,23 @@
 
 package org.apache.oozie;
 
-import junit.framework.TestCase;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.oozie.client.CoordinatorJob;
 import org.apache.oozie.client.WorkflowJob;
 import org.apache.oozie.client.rest.BulkResponseImpl;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 /**
  * Test non-argument constructor and methods of {@link BundleEngine} that either throw exceptions or return null.
  * {@link BundleEngineException} covered as well.
  */
-public class TestBundleEngineSimple extends TestCase {
+public class TestBundleEngineSimple {
 
+    @Test
     public void testGetCoordJob1() {
         BundleEngine be = new BundleEngine();
         try {
@@ -42,6 +46,7 @@
         }
     }
 
+    @Test
     public void testGetCoordJob4() {
         BundleEngine be = new BundleEngine();
         try {
@@ -53,6 +58,7 @@
         }
     }
 
+    @Test
     public void testGetJob1() {
         BundleEngine be = new BundleEngine();
         try {
@@ -64,6 +70,7 @@
         }
     }
 
+    @Test
     public void testGetJob3() {
         BundleEngine be = new BundleEngine();
         try {
@@ -76,6 +83,7 @@
     }
 
     @SuppressWarnings("deprecation")
+    @Test
     public void testReRun2() {
         BundleEngine be = new BundleEngine();
         try {
@@ -88,6 +96,7 @@
         }
     }
 
+    @Test
     public void testGetJobForExternalId() throws BundleEngineException {
         BundleEngine be = new BundleEngine();
         String job = be.getJobIdForExternalId("externalFoo");
@@ -98,6 +107,7 @@
      * Test negative cases of the filter parsing by
      * {@link BundleEngine#parseFilter(String)}.
      */
+    @Test
     public void testParseFilterNegative() {
         BundleEngine be = new BundleEngine();
         // no eq sign in token:
@@ -138,6 +148,7 @@
      * Test negative cases of method
      * {@link BundleEngine#parseBulkFilter(String)}
      */
+    @Test
     public void testParseBulkFilterNegative() {
         // incorrect key=value pair syntax:
         try {
diff --git a/core/src/test/java/org/apache/oozie/TestBundleJobBean.java b/core/src/test/java/org/apache/oozie/TestBundleJobBean.java
index 06e0e68..7a8b475 100644
--- a/core/src/test/java/org/apache/oozie/TestBundleJobBean.java
+++ b/core/src/test/java/org/apache/oozie/TestBundleJobBean.java
@@ -27,10 +27,12 @@
 
 import org.apache.oozie.client.BundleJob.Timeunit;
 import org.apache.oozie.client.Job.Status;
-import org.apache.oozie.test.XTestCase;
 import org.apache.oozie.util.DateUtils;
+import org.junit.Test;
 
-public class TestBundleJobBean extends XTestCase {
+import static org.junit.Assert.assertEquals;
+
+public class TestBundleJobBean {
 
     private static final Date ct = new Date(1L);
     private static final Date et = new Date(2L);
@@ -72,6 +74,7 @@
     /**
      * Test {@link BundleJobBean} get- and set- methods.
      */
+    @Test
     public void testSetGet() {
         final BundleJobBean bean = new BundleJobBean();
         set(bean);
@@ -119,6 +122,7 @@
     /**
      * Test {@link BundleJobBean} serialization and deserialization.
      */
+    @Test
     public void testSerialization() throws IOException {
         final BundleJobBean bean = new BundleJobBean();
 
diff --git a/core/src/test/java/org/apache/oozie/TestCoordinatorJobBean.java b/core/src/test/java/org/apache/oozie/TestCoordinatorJobBean.java
index b811fac..96cad62 100644
--- a/core/src/test/java/org/apache/oozie/TestCoordinatorJobBean.java
+++ b/core/src/test/java/org/apache/oozie/TestCoordinatorJobBean.java
@@ -30,10 +30,12 @@
 import org.apache.oozie.client.CoordinatorJob.Execution;
 import org.apache.oozie.client.CoordinatorJob.Timeunit;
 import org.apache.oozie.client.Job.Status;
-import org.apache.oozie.test.XTestCase;
 import org.apache.oozie.util.DateUtils;
+import org.junit.Test;
 
-public class TestCoordinatorJobBean extends XTestCase {
+import static org.junit.Assert.assertEquals;
+
+public class TestCoordinatorJobBean {
 
     private static final Date ct = new Date(1L);
     private static final Date et = new Date(2L);
@@ -91,6 +93,7 @@
     /**
      * Test {@link CoordinatorJobBean} get- and set- methods.
      */
+    @Test
     public void testSetGet() {
         final CoordinatorJobBean bean = new CoordinatorJobBean();
         set(bean);
@@ -161,6 +164,7 @@
     /**
      * Test {@link CoordinatorJobBean} serialization and deserialization.
      */
+    @Test
     public void testSerialization() throws IOException {
         final CoordinatorJobBean bean = new CoordinatorJobBean();
 
diff --git a/core/src/test/java/org/apache/oozie/TestErrorCode.java b/core/src/test/java/org/apache/oozie/TestErrorCode.java
index c5493f8..bcc0b0f 100644
--- a/core/src/test/java/org/apache/oozie/TestErrorCode.java
+++ b/core/src/test/java/org/apache/oozie/TestErrorCode.java
@@ -18,19 +18,21 @@
 
 package org.apache.oozie;
 
-import org.apache.oozie.test.XTestCase;
+import org.junit.Test;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static org.junit.Assert.assertFalse;
 
-public class TestErrorCode extends XTestCase {
+public class TestErrorCode {
 
     // MessageFormat requires that single quotes are escaped by another single quote; otherwise, it (a) doesn't render the single
     // quote and (b) doesn't parse the {#} tokens after the single quote.  For example, foo("{0} don't have {1}", "I", "a problem")
     // would render as "I dont have {1}".  This test checks that we don't accidently do this.  It should be
     // foo("{0} don''t have {1}", "I", "a problem"), which would result in "I dont have a problem".
-    public void testEscapedSingleQuotes() throws Exception {
+    @Test
+    public void testEscapedSingleQuotes() {
         Pattern singleQuotePattern = Pattern.compile("^'[^']|[^']'[^']|[^']'$");
         for (ErrorCode ec : ErrorCode.values()) {
             String tmpl = ec.getTemplate();
diff --git a/core/src/test/java/org/apache/oozie/TestSLAEventBean.java b/core/src/test/java/org/apache/oozie/TestSLAEventBean.java
index de942de..7a27118 100644
--- a/core/src/test/java/org/apache/oozie/TestSLAEventBean.java
+++ b/core/src/test/java/org/apache/oozie/TestSLAEventBean.java
@@ -20,13 +20,16 @@
 
 import java.util.Date;
 
-import org.apache.oozie.test.XTestCase;
 import org.apache.oozie.util.DateUtils;
 import org.apache.oozie.util.XmlUtils;
 import org.jdom.Element;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 @Deprecated
-public class TestSLAEventBean extends XTestCase {
+public class TestSLAEventBean {
 
     private static final Date ee = new Date(1L);
     private static final Date es = new Date(2L);
@@ -59,6 +62,7 @@
         bean.setUser("u");
     }
 
+    @Test
     public void testSetGet() {
         final SLAEventBean bean = new SLAEventBean();
 
@@ -95,6 +99,7 @@
         assertEquals(DateUtils.convertDateToTimestamp(es), bean.getExpectedStartTS());
     }
 
+    @Test
     public void testToXmlStatusEvent() {
         final SLAEventBean bean = new SLAEventBean();
         set(bean);
@@ -106,6 +111,7 @@
                 + "    <app-name>an</app-name>\r\n" + "  </status>\r\n" + "</event>", actualXml);
     }
 
+    @Test
     public void testToXmlRegistrationEvent() {
         final SLAEventBean bean = new SLAEventBean();
         set(bean);
diff --git a/core/src/test/java/org/apache/oozie/TestWorkflowBean.java b/core/src/test/java/org/apache/oozie/TestWorkflowBean.java
index b68f0f7..aebb91f 100644
--- a/core/src/test/java/org/apache/oozie/TestWorkflowBean.java
+++ b/core/src/test/java/org/apache/oozie/TestWorkflowBean.java
@@ -18,15 +18,11 @@
 
 package org.apache.oozie;
 
-import org.apache.oozie.service.LiteWorkflowAppService;
-import org.apache.oozie.test.XTestCase;
-import org.apache.oozie.workflow.WorkflowInstance;
 import org.apache.oozie.workflow.WorkflowApp;
 import org.apache.oozie.workflow.WorkflowException;
-import org.apache.oozie.workflow.lite.LiteWorkflowApp;
 import org.apache.oozie.workflow.lite.LiteWorkflowInstance;
-import org.apache.oozie.WorkflowJobBean;
 import org.apache.hadoop.conf.Configuration;
+import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,7 +30,9 @@
 import java.io.DataOutputStream;
 import java.util.Map;
 
-public class TestWorkflowBean extends XTestCase {
+import static org.junit.Assert.assertEquals;
+
+public class TestWorkflowBean {
 
     //private static class MyWorkflowInstance implements WorkflowInstance {
     private static class MyWorkflowInstance extends LiteWorkflowInstance {
@@ -108,6 +106,7 @@
         }
     }
 
+    @Test
     public void testWorkflow() {
         WorkflowJobBean workflow = new WorkflowJobBean();
         workflow.setLogToken("logToken");
@@ -118,6 +117,7 @@
         assertEquals("proto", workflow.getProtoActionConf());
     }
 
+    @Test
     public void testEmptyWriteRead() throws Exception {
         WorkflowJobBean workflow = new WorkflowJobBean();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -130,8 +130,4 @@
 
     }
 
-    public void testFullWriteRead() throws Exception {
-        //TODO
-    }
-
 }
diff --git a/core/src/test/java/org/apache/oozie/action/hadoop/TestCredentials.java b/core/src/test/java/org/apache/oozie/action/hadoop/TestCredentials.java
index d3a145d..7601628 100644
--- a/core/src/test/java/org/apache/oozie/action/hadoop/TestCredentials.java
+++ b/core/src/test/java/org/apache/oozie/action/hadoop/TestCredentials.java
@@ -25,8 +25,12 @@
  * Test Credentials
  *
  */
-public class TestCredentials extends ActionExecutorTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
 
+public class TestCredentials {
+
+    @Test
     public void testHbaseCredentials() {
         CredentialsProperties prop = new CredentialsProperties("dummyName", "dummyType");
         prop.getProperties().put("hbase.zookeeper.quorum", "dummyHost");
diff --git a/core/src/test/java/org/apache/oozie/client/TestWorkflowClientException.java b/core/src/test/java/org/apache/oozie/client/TestWorkflowClientException.java
index 895c26a..55dcf9a 100644
--- a/core/src/test/java/org/apache/oozie/client/TestWorkflowClientException.java
+++ b/core/src/test/java/org/apache/oozie/client/TestWorkflowClientException.java
@@ -18,10 +18,17 @@
 
 package org.apache.oozie.client;
 
-import org.apache.oozie.test.XTestCase;
 
-public class TestWorkflowClientException extends XTestCase {
 
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
+
+public class TestWorkflowClientException {
+
+    @Test
     public void testErrorCodeMessage() {
         OozieClientException ex = new OozieClientException("errorCode", "message");
         assertEquals("errorCode", ex.getErrorCode());
@@ -30,6 +37,7 @@
         assertTrue(ex.toString().contains("errorCode") && ex.toString().contains("message"));
     }
 
+    @Test
     public void testErrorCodeCause() {
         OozieClientException ex = new OozieClientException("errorCode", new Exception("message"));
         assertEquals("errorCode", ex.getErrorCode());
@@ -38,6 +46,7 @@
         assertTrue(ex.toString().contains("errorCode") && ex.toString().contains("message"));
     }
 
+    @Test
     public void testErrorCodeMessageCause() {
         OozieClientException ex = new OozieClientException("errorCode", "message", new Exception());
         assertEquals("errorCode", ex.getErrorCode());
diff --git a/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorAction.java b/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorAction.java
index 5efb8cd..e846c56 100644
--- a/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorAction.java
+++ b/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorAction.java
@@ -18,12 +18,15 @@
 
 package org.apache.oozie.client.rest;
 
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.CoordinatorActionBean;
 import org.apache.oozie.client.CoordinatorAction;
 
-public class TestJsonCoordinatorAction extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestJsonCoordinatorAction {
 
     static String CREATE_TIME = "Sat, 05 Sep 2009 00:00:00 GMT";
     static String LAST_MODIFIED_TIME = "Sat, 05 Sep 2009 00:00:00 GMT";
@@ -47,6 +50,7 @@
         return app;
     }
 
+    @Test
     public void testProperties() {
         CoordinatorActionBean app = createAppAction();
         assertEquals("a", app.getJobId());
diff --git a/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorJob.java b/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorJob.java
index 0698339..976f8aa 100644
--- a/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorJob.java
+++ b/core/src/test/java/org/apache/oozie/client/rest/TestJsonCoordinatorJob.java
@@ -21,9 +21,12 @@
 import org.apache.oozie.CoordinatorJobBean;
 import org.apache.oozie.client.CoordinatorJob;
 
-import junit.framework.TestCase;
 
-public class TestJsonCoordinatorJob extends TestCase {
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestJsonCoordinatorJob {
 
     static String LAST_ACTION_TIME = "Wed, 02 Sep 2009 00:00:00 GMT";
     static String NEXT_MATERIALIZED_TIME = "Thu, 03 Sep 2009 00:00:00 GMT";
@@ -54,6 +57,7 @@
         return app;
     }
 
+    @Test
     public void testProperties() {
         CoordinatorJobBean app = createApplication();
         assertEquals("a", app.getAppPath());
diff --git a/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowAction.java b/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowAction.java
index b2a4fba..ee4506f 100644
--- a/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowAction.java
+++ b/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowAction.java
@@ -19,12 +19,14 @@
 package org.apache.oozie.client.rest;
 
 import junit.framework.Assert;
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.WorkflowActionBean;
 import org.apache.oozie.client.WorkflowAction;
 
-public class TestJsonWorkflowAction extends TestCase {
+import org.junit.Test;
+
+public class TestJsonWorkflowAction {
     static String START_TIME = "Thu, 01 Jan 2009 00:00:00 GMT";
     static String END_TIME = "Fri, 02 Jan 2009 00:00:00 GMT";
 
@@ -50,6 +52,7 @@
         return action;
     }
 
+    @Test
     public void testProperties() {
         WorkflowAction action = createNode();
         Assert.assertEquals("a", action.getId());
diff --git a/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowJob.java b/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowJob.java
index 7f71a99..53cb0e1 100644
--- a/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowJob.java
+++ b/core/src/test/java/org/apache/oozie/client/rest/TestJsonWorkflowJob.java
@@ -18,14 +18,17 @@
 
 package org.apache.oozie.client.rest;
 
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.WorkflowActionBean;
 import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.client.WorkflowJob;
 import java.util.Arrays;
 
-public class TestJsonWorkflowJob extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestJsonWorkflowJob {
 
     static String CREATED_TIME = "Thu, 01 Jan 2009 00:00:00 GMT";
     static String START_TIME = "Fri, 02 Jan 2009 00:00:00 GMT";
@@ -48,6 +51,7 @@
         return wf;
     }
 
+    @Test
     public void testProperties() {
         WorkflowJobBean wf = createWorkflow();
         assertEquals("a", wf.getAppPath());
diff --git a/core/src/test/java/org/apache/oozie/coord/input/logic/TestInputLogicParser.java b/core/src/test/java/org/apache/oozie/coord/input/logic/TestInputLogicParser.java
index 622e57f..e2ad1b5 100644
--- a/core/src/test/java/org/apache/oozie/coord/input/logic/TestInputLogicParser.java
+++ b/core/src/test/java/org/apache/oozie/coord/input/logic/TestInputLogicParser.java
@@ -19,15 +19,19 @@
 package org.apache.oozie.coord.input.logic;
 
 
-import junit.framework.TestCase;
+
 
 import org.apache.oozie.coord.input.logic.InputLogicParser;
 import org.apache.oozie.util.XmlUtils;
 import org.jdom.Element;
 import org.jdom.JDOMException;
 
-public class TestInputLogicParser extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
 
+public class TestInputLogicParser {
+
+    @Test
     public void testAndOr() throws JDOMException {
         //@formatter:off
         String xml =
@@ -52,6 +56,7 @@
 
     }
 
+    @Test
     public void testAnd() throws JDOMException {
         //@formatter:off
         String xml =
@@ -69,6 +74,7 @@
 
     }
 
+    @Test
     public void testOr() throws JDOMException {
         //@formatter:off
         String xml =
@@ -86,6 +92,7 @@
 
     }
 
+    @Test
     public void testOrWithMin() throws JDOMException {
         //@formatter:off
         String xml = "<input-logic>" + "<or>" + "<data-in dataset=\"A\" min=\"3\"/> " + "<data-in dataset=\"B\"/>" + "</or>"
@@ -97,6 +104,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testOrWithMinAtOr() throws JDOMException {
         //@formatter:off
         String xml =
@@ -114,6 +122,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testWithName() throws JDOMException {
         //@formatter:off
         String xml =
@@ -131,6 +140,7 @@
                 inputLogicParser.parseWithName(root, "test"));
     }
 
+    @Test
     public void testCombine() throws JDOMException {
         //@formatter:off
         String xml =
@@ -148,6 +158,7 @@
                 inputLogicParser.parseWithName(root, "test"));
     }
 
+    @Test
     public void testWithNameNested() throws JDOMException {
         //@formatter:off
         String xml =
@@ -172,6 +183,7 @@
 
     }
 
+    @Test
     public void testDepth2() throws JDOMException {
         //@formatter:off
      String xml =
@@ -204,6 +216,7 @@
 
     }
 
+    @Test
     public void testDepth2WithCombine() throws JDOMException {
         //@formatter:off
         String xml =
@@ -233,6 +246,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testAndCombine() throws JDOMException {
         //@formatter:off
         String xml =
@@ -256,6 +270,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testComplex1() throws JDOMException {
         //@formatter:off
         String xml=
@@ -286,6 +301,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testAllAnd() throws JDOMException {
         //@formatter:off
         String xml=
@@ -308,6 +324,7 @@
                 inputLogicParser.parse(root));
     }
 
+    @Test
     public void testDataIn() throws JDOMException {
         //@formatter:off
         String xml=
@@ -320,6 +337,7 @@
         assertEquals("dependencyBuilder.input(\"A\").build()", inputLogicParser.parse(root));
     }
 
+    @Test
     public void testMinWait() throws JDOMException {
         //@formatter:off
         String xml =
@@ -340,6 +358,7 @@
                 + "&& dependencyBuilder.input(\"B\").min(3).inputWait(10).build())", inputLogicParser.parse(root));
     }
 
+    @Test
     public void testOrAndDataIn() throws JDOMException {
         //@formatter:off
         String xml =
diff --git a/core/src/test/java/org/apache/oozie/service/TestActionConfFileType.java b/core/src/test/java/org/apache/oozie/service/TestActionConfFileType.java
index c1dbe6f..a323f14 100644
--- a/core/src/test/java/org/apache/oozie/service/TestActionConfFileType.java
+++ b/core/src/test/java/org/apache/oozie/service/TestActionConfFileType.java
@@ -18,20 +18,28 @@
 
 package org.apache.oozie.service;
 
-import org.apache.oozie.test.XTestCase;
 
-public class TestActionConfFileType extends XTestCase {
+
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class TestActionConfFileType {
 
     private static final String XML_FILE = "a.xml";
     private static final String PROPERTIES_FILE = "b.properties";
     private static final String JSON_FILE = "c.json";
 
+    @Test
     public void testIsSupportedFileType() {
         assertTrue(ActionConfFileType.isSupportedFileType(XML_FILE));
         assertTrue(ActionConfFileType.isSupportedFileType(PROPERTIES_FILE));
         assertFalse(ActionConfFileType.isSupportedFileType(JSON_FILE));
     }
 
+    @Test
     public void testGetFileType() {
         assertEquals(ActionConfFileType.XML, ActionConfFileType.getFileType(XML_FILE));
         assertEquals(ActionConfFileType.PROPERTIES, ActionConfFileType.getFileType(PROPERTIES_FILE));
@@ -45,6 +53,7 @@
         }
     }
 
+    @Test
     public void testGetExtension() {
         assertEquals(".xml", ActionConfFileType.XML.getExtension());
         assertEquals(".properties", ActionConfFileType.PROPERTIES.getExtension());
diff --git a/core/src/test/java/org/apache/oozie/servlet/TestHostnameFilter.java b/core/src/test/java/org/apache/oozie/servlet/TestHostnameFilter.java
index 18b22a9..7805ddf 100644
--- a/core/src/test/java/org/apache/oozie/servlet/TestHostnameFilter.java
+++ b/core/src/test/java/org/apache/oozie/servlet/TestHostnameFilter.java
@@ -29,12 +29,15 @@
 
 
 import junit.framework.Assert;
-import junit.framework.TestCase;
+
 import org.apache.hadoop.util.Shell;
 import org.mockito.Mockito;
 
-public class TestHostnameFilter extends TestCase {
+import org.junit.Test;
 
+public class TestHostnameFilter {
+
+    @Test
     public void testHostname() throws Exception {
         ServletRequest request = Mockito.mock(ServletRequest.class);
         Mockito.when(request.getRemoteAddr()).thenReturn("localhost");
@@ -61,6 +64,7 @@
         filter.destroy();
     }
 
+    @Test
   public void testMissingHostname() throws Exception {
     ServletRequest request = Mockito.mock(ServletRequest.class);
     Mockito.when(request.getRemoteAddr()).thenReturn(null);
diff --git a/core/src/test/java/org/apache/oozie/test/TestEmbeddedServletContainer.java b/core/src/test/java/org/apache/oozie/test/TestEmbeddedServletContainer.java
index b594659..0cf2aa6 100644
--- a/core/src/test/java/org/apache/oozie/test/TestEmbeddedServletContainer.java
+++ b/core/src/test/java/org/apache/oozie/test/TestEmbeddedServletContainer.java
@@ -27,8 +27,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class TestEmbeddedServletContainer extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
 
+public class TestEmbeddedServletContainer {
+
+    @Test
     public void testEmbeddedServletContainer() throws Exception {
         EmbeddedServletContainer container = new EmbeddedServletContainer("blah");
         container.addServletEndpoint("/ping/*", PingServlet.class);
@@ -45,6 +50,7 @@
         }
     }
 
+    @Test
     public void testMultipleParallelStarts() throws Exception {
         final List<EmbeddedServletContainer> containers = new ArrayList<>();
         PingServlet.FILTER_INIT = false;
diff --git a/core/src/test/java/org/apache/oozie/util/TestBlockingWritesExitValueProcess.java b/core/src/test/java/org/apache/oozie/util/TestBlockingWritesExitValueProcess.java
index fa0fa78..0be789c 100644
--- a/core/src/test/java/org/apache/oozie/util/TestBlockingWritesExitValueProcess.java
+++ b/core/src/test/java/org/apache/oozie/util/TestBlockingWritesExitValueProcess.java
@@ -24,7 +24,11 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-public class TestBlockingWritesExitValueProcess extends DrainerTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+public class TestBlockingWritesExitValueProcess {
     private static final String TEST_STRING = "test string";
     @Rule
     public final ExpectedException expectedException = ExpectedException.none();
diff --git a/core/src/test/java/org/apache/oozie/util/TestELConstantsFunctions.java b/core/src/test/java/org/apache/oozie/util/TestELConstantsFunctions.java
index 61af313..811281a 100644
--- a/core/src/test/java/org/apache/oozie/util/TestELConstantsFunctions.java
+++ b/core/src/test/java/org/apache/oozie/util/TestELConstantsFunctions.java
@@ -18,7 +18,7 @@
 
 package org.apache.oozie.util;
 
-import org.apache.oozie.test.XTestCase;
+
 import org.jdom.Element;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
@@ -30,13 +30,19 @@
 import java.util.Properties;
 import java.util.TimeZone;
 
-public class TestELConstantsFunctions extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
+public class TestELConstantsFunctions {
+
+    @Test
     public void testTrim() {
         assertEquals("", ELConstantsFunctions.trim(null));
         assertEquals("a", ELConstantsFunctions.trim(" a "));
     }
 
+    @Test
     public void testConcat() {
         assertEquals("a", ELConstantsFunctions.concat("a", null));
         assertEquals("b", ELConstantsFunctions.concat(null, "b"));
@@ -44,6 +50,7 @@
         assertEquals("", ELConstantsFunctions.concat(null, null));
     }
 
+    @Test
     public void testReplaceAll() {
         assertEquals("aefefd", ELConstantsFunctions.replaceAll("abcbcd", "bc", "ef"));
         assertEquals("d1 d2 d3", ELConstantsFunctions.replaceAll("d1,d2,d3", ",", " "));
@@ -54,6 +61,7 @@
         assertEquals("acd", ELConstantsFunctions.replaceAll("abcbcd", "bcb", null));
     }
 
+    @Test
     public void testAppendAll() {
         assertEquals("/a/b/ADD,/c/b/ADD,/c/d/ADD", ELConstantsFunctions.appendAll("/a/b/,/c/b/,/c/d/", "ADD", ","));
         assertEquals("/a/b/ADD", ELConstantsFunctions.appendAll("/a/b/", "ADD", ","));
@@ -67,6 +75,7 @@
         assertEquals("/a/b/ADD,/c/b/ADD,/c/d/ADD", ELConstantsFunctions.appendAll("/a/b/,/c/b/,/c/d/", "ADD", ","));
     }
 
+    @Test
     public void testTimestamp() throws Exception {
         String s = ELConstantsFunctions.timestamp();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
@@ -74,11 +83,13 @@
         assertNotNull(sdf.parse(s));
     }
 
+    @Test
     public void testUrlEncode() {
         assertEquals("+", ELConstantsFunctions.urlEncode(" "));
         assertEquals("%25", ELConstantsFunctions.urlEncode("%"));
     }
 
+    @Test
     public void testToJsonStr() throws Exception {
         Map<String, String> map = new HashMap<String, String>();
         map.put("a", "A");
@@ -90,6 +101,7 @@
         assertEquals(map, map2);
     }
 
+    @Test
     public void testToPropertiesStr() throws Exception {
         Map<String, String> map = new HashMap<String, String>();
         map.put("a", "A");
@@ -100,6 +112,7 @@
         assertEquals(map, map2);
     }
 
+    @Test
     public void testToConfigurationStr() throws Exception {
         Map<String, String> map = new HashMap<String, String>();
         map.put("a", "A");
diff --git a/core/src/test/java/org/apache/oozie/util/TestELEvaluator.java b/core/src/test/java/org/apache/oozie/util/TestELEvaluator.java
index 260ca1d..eab00fd 100644
--- a/core/src/test/java/org/apache/oozie/util/TestELEvaluator.java
+++ b/core/src/test/java/org/apache/oozie/util/TestELEvaluator.java
@@ -18,14 +18,19 @@
 
 package org.apache.oozie.util;
 
-import junit.framework.TestCase;
+
 
 import javax.el.ELException;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
-public class TestELEvaluator extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+public class TestELEvaluator {
 
     public static String functionA() {
         assertEquals("A", ELEvaluator.getCurrent().getVariable("a"));
@@ -68,6 +73,7 @@
         }
     }
 
+    @Test
     public void testContextVars() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         assertNull(support.getVariable("a"));
@@ -89,6 +95,7 @@
     }
 
 
+    @Test
     public void testContextFunctions() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         support.addFunction("a", "a", functionA);
@@ -112,6 +119,7 @@
         assertEquals(functionA, support.resolveFunction("a", "a"));
     }
 
+    @Test
     public void testVars() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         support.setVariable("a", "A");
@@ -134,6 +142,7 @@
         }
     }
 
+    @Test
     public void testFunctions() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         support.addFunction("a", "a", functionA);
@@ -141,6 +150,7 @@
         assertEquals(functionA, evaluator.getContext().resolveFunction("a", "a"));
     }
 
+    @Test
     public void testEval() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         support.setVariable("a", "A");
@@ -149,6 +159,7 @@
         assertEquals("Aa", evaluator.evaluate("${a}${a:a()}", String.class));
     }
 
+    @Test
     public void testCurrent() throws Exception {
         ELEvaluator.Context support = new ELEvaluator.Context();
         support.setVariable("a", "A");
@@ -159,6 +170,7 @@
         assertNull(ELEvaluator.getCurrent());
     }
 
+    @Test
     public void testFunctionELEvaluationError() throws Exception {
         try {
             ELEvaluator.Context support = new ELEvaluator.Context();
diff --git a/core/src/test/java/org/apache/oozie/util/TestParamChecker.java b/core/src/test/java/org/apache/oozie/util/TestParamChecker.java
index 9d709b5..c94dd9e 100644
--- a/core/src/test/java/org/apache/oozie/util/TestParamChecker.java
+++ b/core/src/test/java/org/apache/oozie/util/TestParamChecker.java
@@ -18,13 +18,20 @@
 
 package org.apache.oozie.util;
 
-import org.apache.oozie.test.XTestCase;
+
 
 import java.util.ArrayList;
 import java.util.Arrays;
 
-public class TestParamChecker extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
+public class TestParamChecker {
+
+    @Test
     public void testNotNullElements() {
         ParamChecker.notEmptyElements(new ArrayList<String>(), "name");
         ParamChecker.notEmptyElements(Arrays.asList("a"), "name");
@@ -44,6 +51,7 @@
         }
     }
 
+    @Test
     public void testNotEmpty() {
         ParamChecker.notEmpty("value", "name");
         try {
@@ -62,6 +70,7 @@
         }
     }
 
+    @Test
     public void testNotEmptyElements() {
         ParamChecker.notEmptyElements(new ArrayList<String>(), "name");
         ParamChecker.notEmptyElements(Arrays.asList("a"), "name");
@@ -81,6 +90,7 @@
         }
     }
 
+    @Test
     public void testValidToken() {
         ParamChecker.validateActionName("azAZ09_-");
         try {
@@ -106,6 +116,7 @@
         }
     }
 
+    @Test
     public void testValidIdentifier() {
         assertTrue(ParamChecker.isValidIdentifier("a"));
         assertTrue(ParamChecker.isValidIdentifier("a1"));
@@ -115,6 +126,7 @@
         assertFalse(ParamChecker.isValidIdentifier("1"));
     }
 
+    @Test
     public void testCheckGTZero() {
         assertEquals(120, ParamChecker.checkGTZero(120, "test"));
         try {
@@ -131,6 +143,7 @@
         }
     }
 
+    @Test
     public void testCheckGEZero() {
         assertEquals(120, ParamChecker.checkGEZero(120, "test"));
         assertEquals(0, ParamChecker.checkGEZero(0, "test"));
@@ -142,6 +155,7 @@
         }
     }
 
+    @Test
     public void testCheckInteger() {
         assertEquals(120, ParamChecker.checkInteger("120", "test"));
         assertEquals(-12, ParamChecker.checkInteger("-12", "test"));
@@ -159,6 +173,7 @@
         }
     }
 
+    @Test
     public void testCheckUTC() {
         ParamChecker.checkDateOozieTZ("2009-02-01T01:00Z", "test");
         try {
@@ -175,6 +190,7 @@
         }
     }
 
+    @Test
     public void testCheckTimeZone() {
         ParamChecker.checkTimeZone("UTC", "test");
         try {
@@ -192,6 +208,7 @@
         }
     }
 
+    @Test
     public void testIsMember() {
         String[] members = {"LIFO", "FIFO", "ONLYLAST"};
         ParamChecker.isMember("FIFO", members, "test");
@@ -204,6 +221,7 @@
 
     }
 
+    @Test
     public void testCheckFrequency() {
         ParamChecker.checkFrequency("10");
 
@@ -228,6 +246,7 @@
         }
     }
 
+    @Test
     public void testValidateActionName() {
         String actionName = "actionName";
         ParamChecker.validateActionName(actionName);
diff --git a/core/src/test/java/org/apache/oozie/util/TestParameterVerifier.java b/core/src/test/java/org/apache/oozie/util/TestParameterVerifier.java
index 9cc08ed..39edfbc 100644
--- a/core/src/test/java/org/apache/oozie/util/TestParameterVerifier.java
+++ b/core/src/test/java/org/apache/oozie/util/TestParameterVerifier.java
@@ -20,10 +20,17 @@
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.oozie.ErrorCode;
-import org.apache.oozie.test.XTestCase;
 
-public class TestParameterVerifier extends XTestCase {
 
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class TestParameterVerifier {
+
+    @Test
     public void testVerifyParametersNull() throws Exception {
         try {
             ParameterVerifier.verifyParameters(null, XmlUtils.parseXml("<root xmlns=\"uri:oozie:workflow:0.4\"></root>"));
@@ -45,6 +52,7 @@
         }
     }
 
+    @Test
     public void testVerifyParametersEmpty() throws Exception {
         Configuration conf = new Configuration(false);
         conf.set("A", "a");
@@ -59,6 +67,7 @@
         assertEquals("a", conf.get("A"));
     }
 
+    @Test
     public void testVerifyParametersMissing() throws Exception {
         Configuration conf = new Configuration(false);
 
@@ -104,6 +113,7 @@
         }
     }
 
+    @Test
     public void testVerifyParametersDefined() throws Exception {
         Configuration conf = new Configuration(false);
         conf.set("hello", "planet");
@@ -123,6 +133,7 @@
         assertEquals("planet", conf.get("hello"));
     }
 
+    @Test
     public void testVerifyParametersEmptyName() throws Exception {
         Configuration conf = new Configuration(false);
 
@@ -148,6 +159,7 @@
         }
     }
 
+    @Test
     public void testSupportsParameters() throws Exception {
         assertFalse(ParameterVerifier.supportsParameters("uri:oozie:workflow:0.3"));
         assertTrue(ParameterVerifier.supportsParameters("uri:oozie:workflow:0.4"));
diff --git a/core/src/test/java/org/apache/oozie/util/TestPriorityDelayQueue.java b/core/src/test/java/org/apache/oozie/util/TestPriorityDelayQueue.java
index 8c5a491..3af1c08 100644
--- a/core/src/test/java/org/apache/oozie/util/TestPriorityDelayQueue.java
+++ b/core/src/test/java/org/apache/oozie/util/TestPriorityDelayQueue.java
@@ -18,7 +18,7 @@
 
 package org.apache.oozie.util;
 
-import junit.framework.TestCase;
+
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -29,7 +29,15 @@
 
 import org.apache.oozie.util.PriorityDelayQueue.QueueElement;
 
-public class TestPriorityDelayQueue extends TestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+public class TestPriorityDelayQueue {
 
     public static class DPriorityDelayQueue<E> extends PriorityDelayQueue<E> {
 
@@ -44,6 +52,7 @@
 
     }
 
+    @Test
     public void testQueueElement() throws Exception {
         Object obj = new Object();
 
@@ -93,6 +102,7 @@
         assertTrue(e1.compareTo(e2) < 0);
     }
 
+    @Test
     public void testQueueConstructor() throws Exception {
         try {
             new PriorityDelayQueue<Integer>(0, 1000, TimeUnit.MILLISECONDS, -1);
@@ -123,6 +133,7 @@
         }
     }
 
+    @Test
     public void testBoundUnboundQueueSize() {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(1, 1000, TimeUnit.MILLISECONDS, -1);
         assertEquals(1, q.getPriorities());
@@ -149,6 +160,7 @@
         assertEquals(1, q.size());
     }
 
+    @Test
     public void testPoll() throws Exception {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(3, 500, TimeUnit.MILLISECONDS, -1);
 
@@ -240,6 +252,7 @@
         assertEquals(0, q.size());
     }
 
+    @Test
     public void testPeek() throws Exception {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(3, 500, TimeUnit.MILLISECONDS, -1);
 
@@ -290,6 +303,7 @@
         assertEquals(0, q.size());
     }
 
+    @Test
     public void testAntiStarvation() throws Exception {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(3, 500, TimeUnit.MILLISECONDS, -1);
         q.offer(new TestQueueElement<Integer>(1));
@@ -303,6 +317,7 @@
         assertEquals(1, q.sizes()[2]);
     }
 
+    @Test
     public void testConcurrency() throws Exception {
         final int threads = 5;
         final AtomicInteger counter = new AtomicInteger(threads);
@@ -343,6 +358,7 @@
         }
     }
 
+    @Test
     public void testIterator() throws Exception {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(3, 500, TimeUnit.MILLISECONDS, -1);
 
@@ -365,6 +381,7 @@
         assertEquals(4, q.size());
     }
 
+    @Test
     public void testClear() {
         PriorityDelayQueue<Integer> q = new PriorityDelayQueue<Integer>(3, 500, TimeUnit.MILLISECONDS, -1);
         q.offer(new TestQueueElement<Integer>(1, 1, 10, TimeUnit.MILLISECONDS));
diff --git a/core/src/test/java/org/apache/oozie/util/db/TestSLADbOperations.java b/core/src/test/java/org/apache/oozie/util/db/TestSLADbOperations.java
index 37dee73..295aa82 100644
--- a/core/src/test/java/org/apache/oozie/util/db/TestSLADbOperations.java
+++ b/core/src/test/java/org/apache/oozie/util/db/TestSLADbOperations.java
@@ -21,14 +21,18 @@
 import java.util.Date;
 import org.apache.oozie.SLAEventBean;
 import org.apache.oozie.client.SLAEvent;
-import org.apache.oozie.test.XTestCase;
+
 import org.apache.oozie.util.DateUtils;
 import org.apache.oozie.util.XmlUtils;
 import org.jdom.Element;
 
-public class TestSLADbOperations extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestSLADbOperations {
 
     @SuppressWarnings("deprecation")
+    @Test
     public void testCreateSlaRegistrationEventMinReqFields() throws Exception {
         Date nomDate = DateUtils.parseDateOozieTZ("2014-01-01T01:01Z");
         String slaXML = " <sla:info xmlns:sla='uri:oozie:sla:0.2'>"
diff --git a/core/src/test/java/org/apache/oozie/util/db/TestSLADbXOperations.java b/core/src/test/java/org/apache/oozie/util/db/TestSLADbXOperations.java
index 94218be..2876958 100644
--- a/core/src/test/java/org/apache/oozie/util/db/TestSLADbXOperations.java
+++ b/core/src/test/java/org/apache/oozie/util/db/TestSLADbXOperations.java
@@ -21,14 +21,18 @@
 import java.util.Date;
 import org.apache.oozie.SLAEventBean;
 import org.apache.oozie.client.SLAEvent;
-import org.apache.oozie.test.XTestCase;
+
 import org.apache.oozie.util.DateUtils;
 import org.apache.oozie.util.XmlUtils;
 import org.jdom.Element;
 
-public class TestSLADbXOperations extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestSLADbXOperations {
 
     @SuppressWarnings("deprecation")
+    @Test
     public void testCreateSlaRegistrationEventMinReqFields() throws Exception {
         Date nomDate = DateUtils.parseDateOozieTZ("2014-01-01T01:01Z");
         String slaXML = " <sla:info xmlns:sla='uri:oozie:sla:0.2'>"
diff --git a/core/src/test/java/org/apache/oozie/util/db/TestSchema.java b/core/src/test/java/org/apache/oozie/util/db/TestSchema.java
index 33bbc71..623158f 100644
--- a/core/src/test/java/org/apache/oozie/util/db/TestSchema.java
+++ b/core/src/test/java/org/apache/oozie/util/db/TestSchema.java
@@ -31,13 +31,16 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.oozie.test.XTestCase;
+
 import org.apache.oozie.util.db.Schema.Column;
 import org.apache.oozie.util.db.Schema.DBType;
 import org.apache.oozie.util.db.Schema.Index;
 import org.apache.oozie.util.db.Schema.Table;
 
-public class TestSchema extends XTestCase {
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestSchema {
 
     public static Map<Table, List<Column>> TABLE_COLUMNS = new HashMap<Table, List<Column>>();
     private static final String DB_NAME = "testdb";
@@ -189,6 +192,7 @@
         }
     }
 
+    @Test
     public void testGenerateCreateScript() throws SQLException {
         Connection conn = getDirectConnection();
         prepareDB(conn);
diff --git a/release-log.txt b/release-log.txt
index aceb29a..fb1cc8e 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.2.0 release (trunk - unreleased)
 
+OOZIE-3476 Migrate classes without setup/tearDown to JUnit4 (asalamon74 via kmarton)
 OOZIE-3522 Migrate from Guava's Joiner (asalamon74 via kmarton)
 OOZIE-3520 Upgrade Derby to 10.14.2.0 (nobigo via asalamon74)
 OOZIE-3513 Migrate from Preconditions.checkNotNull and ParamChecker.notNull (asalamon74 via kmarton)
diff --git a/sharelib/hive2/src/test/java/org/apache/oozie/action/hadoop/TestHive2Main.java b/sharelib/hive2/src/test/java/org/apache/oozie/action/hadoop/TestHive2Main.java
index b6ad294..e272a29 100644
--- a/sharelib/hive2/src/test/java/org/apache/oozie/action/hadoop/TestHive2Main.java
+++ b/sharelib/hive2/src/test/java/org/apache/oozie/action/hadoop/TestHive2Main.java
@@ -22,10 +22,14 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.oozie.test.XTestCase;
 
-public class TestHive2Main extends XTestCase {
 
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class TestHive2Main {
+
+    @Test
     public void testJobIDPattern() {
         List<String> lines = new ArrayList<String>();
         lines.add("Ended Job = job_001");
diff --git a/tools/src/test/java/org/apache/oozie/tools/TestBlockSizeCalculator.java b/tools/src/test/java/org/apache/oozie/tools/TestBlockSizeCalculator.java
index b4a668e..9c1e3d3 100644
--- a/tools/src/test/java/org/apache/oozie/tools/TestBlockSizeCalculator.java
+++ b/tools/src/test/java/org/apache/oozie/tools/TestBlockSizeCalculator.java
@@ -18,32 +18,36 @@
 
 package org.apache.oozie.tools;
 
-import junit.framework.TestCase;
-import org.junit.Assert;
+import org.junit.Test;
 
-public class TestBlockSizeCalculator extends TestCase{
+import static org.junit.Assert.assertEquals;
+
+public class TestBlockSizeCalculator {
 
     private long minBlockSize = 1048576;
     private long bytesPerChecksum = 512;
 
+    @Test
     public void testGetValidBlockSizeWhenFileLengthLowerThanMinBlockSize() {
         long fileLength = 615100;
         long validBlockSize = OozieSharelibCLI.BlockSizeCalculator.getValidBlockSize(fileLength, minBlockSize, bytesPerChecksum);
-        Assert.assertEquals("The block size should be equal to the defined min block size", minBlockSize, validBlockSize);
+        assertEquals("The block size should be equal to the defined min block size", minBlockSize, validBlockSize);
     }
 
+    @Test
     public void testGetValidBlockSizeWhenBytesPerChecksumDoesNotDivideFileLength() {
         long fileLength = 1048577;
         long expectedBlockSize = (fileLength / bytesPerChecksum + 1) * bytesPerChecksum;
         long validBlockSize = OozieSharelibCLI.BlockSizeCalculator.getValidBlockSize(fileLength, minBlockSize, bytesPerChecksum);
-        Assert.assertEquals("The block size should be the first greater value than the file size, dividable by bytes per checksum",
+        assertEquals("The block size should be the first greater value than the file size, dividable by bytes per checksum",
                 expectedBlockSize, validBlockSize);
     }
 
+    @Test
     public void testGetValidBlockSizeWhenBytesPerChecksumDivideFileLength() {
         long fileLength = 1049088;
         long validBlockSize = OozieSharelibCLI.BlockSizeCalculator.getValidBlockSize(fileLength, minBlockSize, bytesPerChecksum);
-        Assert.assertEquals("The block size should be equal with the file length", fileLength, validBlockSize);
+        assertEquals("The block size should be equal with the file length", fileLength, validBlockSize);
     }
 
 }
