diff --git a/src/test/java/net/onrc/onos/api/rest/TestRest.java b/src/test/java/net/onrc/onos/api/rest/TestRest.java
index 76792ab..d6b64c4 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRest.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRest.java
@@ -3,9 +3,12 @@
 import com.codahale.metrics.MetricFilter;
 import net.floodlightcontroller.restserver.RestletRoutable;
 import net.onrc.onos.core.metrics.OnosMetrics;
+import net.onrc.onos.core.util.UnitTest;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.junit.After;
+import org.junit.Before;
 import org.restlet.resource.ClientResource;
 
 import java.util.LinkedList;
@@ -22,7 +25,7 @@
  * See TestRestIntent as an example of an implementation which uses the
  * TestRest framework.
  */
-public class TestRest {
+public class TestRest extends UnitTest {
 
     private final List<RestletRoutable> restlets = new LinkedList<>();
     private TestRestApiServer restApiServer;
@@ -60,7 +63,9 @@
     /**
      * Set up the REST API web server and start it.
      */
+    @Before
     public void setUp() {
+        setRestPort(generateRandomPort());
         restApiServer = new TestRestApiServer(restPort);
         restApiServer.startServer(restlets);
     }
@@ -69,8 +74,8 @@
      * Remove anything that will interfere with the next test running correctly.
      * Shuts down the test REST web server.
      */
-
-    public void tearDown() {
+    @After
+    public void tearDownRest() {
         getRestApiServer().stopServer();
         OnosMetrics.removeMatching(MetricFilter.ALL);
     }
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntent.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntent.java
index 8d6dafd..dabcd1a 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestIntent.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntent.java
@@ -8,6 +8,7 @@
 import net.onrc.onos.core.intent.runtime.IntentTestMocks;
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
+import org.junit.After;
 import org.restlet.resource.ClientResource;
 
 import java.util.Collection;
@@ -71,10 +72,9 @@
      * Remove anything that will interfere with the next test running correctly.
      * Shuts down the test REST web server and removes the mocks.
      */
-    @Override
-    public void tearDown() {
+    @After
+    public void tearDownMocks() {
         getMocks().tearDownIntentMocks();
-        super.tearDown();
     }
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighDelete.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighDelete.java
index 89ab771..d91ead8 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighDelete.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighDelete.java
@@ -5,9 +5,7 @@
 import net.onrc.onos.core.intent.IntentOperationList;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
-import org.junit.After;
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -32,28 +30,6 @@
     private static final Long LOCAL_PORT = 0xFFFEL;
     private static final String BAD_SWITCH_INTENT_NAME = "No Such Switch Intent";
 
-
-    /**
-     * Create the web server, PathCalcRuntime, and mocks required for
-     * all of the tests.
-     */
-    @Before
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    public void afterTest() {
-        tearDown();
-    }
-
-
     /**
      * Make a set of Intents that can be used as test data.
      */
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighGet.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighGet.java
index 58e9bfa..d87325a 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighGet.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighGet.java
@@ -6,9 +6,7 @@
 import net.onrc.onos.core.intent.IntentOperationList;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
-import org.junit.After;
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -41,27 +39,6 @@
     private static final String IP_ADDRESS_3 = "127.0.0.3";
 
     /**
-     * Create the web server, PathCalcRuntime, and mocks required for
-     * all of the tests.
-     */
-    @Before
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    public void afterTest() {
-        tearDown();
-    }
-
-
-    /**
      * Make a set of Intents that can be used as test data.
      */
     private void makeDefaultIntents() {
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java
index ce6d461..5e0ca9d 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java
@@ -3,8 +3,6 @@
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import org.json.JSONArray;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -42,27 +40,6 @@
     "}" +
     "]";
 
-
-    /**
-     * Create the web server, PathCalcRuntime, and mocks required for
-     * all of the tests.
-     */
-    @Before
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    public void afterTest() {
-        tearDown();
-    }
-
     /**
      * Test that a POST operation to create a high level Intent
      * creates an object correctly.
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntentLowGet.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntentLowGet.java
index a13c75d..065f342 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestIntentLowGet.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntentLowGet.java
@@ -9,9 +9,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -40,27 +38,6 @@
     private static final String IP_ADDRESS_3 = "127.0.0.3";
 
     /**
-     * Create the web server, PathCalcRuntime, and mocks required for
-     * all of the tests.
-     */
-    @Before
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    public void afterTest() {
-        tearDown();
-    }
-
-
-    /**
      * Make a set of Intents that can be used as test data.
      */
     private void makeDefaultIntents() {
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
index 6796578..c5d0e2f 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
@@ -28,16 +28,6 @@
     }
 
     /**
-     * Removes anything that will interfere with the next test running
-     * correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @Override
-    public void tearDown() {
-        super.tearDown();
-    }
-
-    /**
      * Fetches the base URL for Metrics REST APIs.
      *
      * @return base URL
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
index 3eef047..8d2142f 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
@@ -5,11 +5,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -20,30 +16,8 @@
 /**
  * Unit tests for REST APIs for Counter Metrics.
  */
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsCounters extends TestRestMetrics {
 
-    /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
     //  Test Counter data objects
     private static final OnosMetrics.MetricsComponent COMPONENT =
             OnosMetrics.registerComponent("MetricsUnitTests");
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
index 4be1a5c..caded72 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
@@ -1,16 +1,12 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Gauge;
-import com.codahale.metrics.MetricFilter;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -21,8 +17,6 @@
 /**
  * Unit tests for filtering REST APIs for Timer Metrics.
  */
-
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsFilters extends TestRestMetrics {
 
     /**
@@ -32,22 +26,10 @@
     @Before
     @SuppressWarnings("ununsed")
     public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
         //  Make some test data
         createMetrics();
     }
 
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        destroyMetrics();
-        tearDown();
-    }
 
     //  Test data objects
     private static final OnosMetrics.MetricsComponent COMPONENT =
@@ -186,13 +168,6 @@
     }
 
     /**
-     * Removes the Metrics to clean up for the next test run.
-     */
-    private void destroyMetrics() {
-        OnosMetrics.removeMatching(MetricFilter.ALL);
-    }
-
-    /**
      * Tests that query of non existant name returns nothing.
      *
      * @throws JSONException if any of the JSON processing fails.
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
index 205f527..481f86c 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
@@ -5,11 +5,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -20,30 +16,8 @@
 /**
  * Unit tests for REST APIs for Gauges Metrics.
  */
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsGauges extends TestRestMetrics {
 
-    /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
     // Test data for Gauges
 
     private static final OnosMetrics.MetricsComponent COMPONENT =
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
index c3fd01c..083edbb 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
@@ -5,11 +5,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import java.util.Arrays;
@@ -25,30 +21,8 @@
 /**
  * Unit tests for REST APIs for Histogram Metrics.
  */
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsHistograms extends TestRestMetrics {
 
-    /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
     // Test data for Histograms
 
     private static final OnosMetrics.MetricsComponent COMPONENT =
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
index 88b459b..c8d5d8e 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
@@ -5,11 +5,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -23,33 +19,10 @@
 /**
  * Unit tests for REST APIs for Meter Metrics.
  */
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsMeters extends TestRestMetrics {
 
-    /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
     //  Test data for Meters
 
-
     private static final OnosMetrics.MetricsComponent COMPONENT =
             OnosMetrics.registerComponent("MetricsUnitTest");
     private static final OnosMetrics.MetricsFeature FEATURE =
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
index 6aec6ee..fc75cc8 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
@@ -7,11 +7,7 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -25,20 +21,8 @@
 /**
  * Unit tests for REST APIs for Timer Metrics.
  */
-@RunWith(PowerMockRunner.class)
 public class TestRestMetricsTimers extends TestRestMetrics {
 
-    /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
     //  Test data objects for Timers
 
     private static final OnosMetrics.MetricsComponent COMPONENT =
@@ -58,8 +42,8 @@
     private static final String TIMER2_NAME = "timer2";
     private static final String TIMER2_FULL_NAME =
             OnosMetrics.generateName(COMPONENT,
-                                     FEATURE,
-                                     TIMER2_NAME);
+                    FEATURE,
+                    TIMER2_NAME);
     private static final int TIMER2_COUNT = 10;
 
     private static final int RESERVOIR_SIZE = 100;
@@ -97,9 +81,9 @@
                                    timer1);
 
         OnosMetrics.registerMetric(COMPONENT,
-                                   FEATURE,
-                                   TIMER2_NAME,
-                                   timer2);
+                FEATURE,
+                TIMER2_NAME,
+                timer2);
     }
 
     /**
@@ -135,16 +119,6 @@
     }
 
     /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
-    /**
      * Unit test for the REST APIs for Metrics Timers.
      *
      * @throws JSONException if any of the JSON processing fails.
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java b/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java
index aef7262..d0f578c 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestTopology.java
@@ -6,6 +6,7 @@
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.web.TopologyWebRoutable;
+import org.junit.After;
 
 /**
  * Test harness for Topology based REST API tests.  This class maintains the
@@ -53,10 +54,9 @@
      * Remove anything that will interfere with the next test running correctly.
      * Shuts down the test REST web server and removes the mocks.
      */
-    @Override
-    public void tearDown() {
+    @After
+    public void tearDownMocks() {
         getMocks().tearDownIntentMocks();
-        super.tearDown();
     }
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java b/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
index 4eba584..35ed2ec 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestTopologyGet.java
@@ -1,12 +1,10 @@
 package net.onrc.onos.api.rest;
 
+import com.google.common.collect.ImmutableList;
 import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
-
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -14,14 +12,16 @@
 import org.restlet.data.Status;
 import org.restlet.resource.ClientResource;
 
-import com.google.common.collect.ImmutableList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
 import static net.onrc.onos.api.rest.ClientResourceStatusMatcher.hasStatusOf;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
 
 /**
  * Tests for topology REST get operations.
@@ -31,28 +31,6 @@
 public class TestRestTopologyGet extends TestRestTopology {
 
     /**
-     * Create the web server and mocks required for
-     * all of the tests.
-     */
-    @Before
-    @SuppressWarnings("ununsed")
-    public void beforeTest() {
-        setRestPort(generateRandomPort());
-        setUp();
-    }
-
-
-    /**
-     * Remove anything that will interfere with the next test running correctly.
-     * Shuts down the test REST web server and removes the mocks.
-     */
-    @After
-    @SuppressWarnings("unused")
-    public void afterTest() {
-        tearDown();
-    }
-
-    /**
      * Check that the JSON array returned for the switches element matches
      * the data in the mocked topology.
      *
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
index 425646d..184499f 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
@@ -18,7 +18,6 @@
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.intent.IntentOperationList;
 import net.onrc.onos.core.intent.ShortestPathIntent;
-import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.LinkEvent;
 import net.onrc.onos.core.topology.MockTopology;
@@ -28,7 +27,7 @@
 import net.onrc.onos.core.topology.TopologyEvents;
 import net.onrc.onos.core.util.SwitchPort;
 
-import com.codahale.metrics.MetricFilter;
+import net.onrc.onos.core.util.UnitTest;
 import org.hamcrest.Description;
 import org.hamcrest.Factory;
 import org.hamcrest.Matcher;
@@ -50,7 +49,7 @@
  */
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(PathCalcRuntimeModule.class)
-public class PathCalcRuntimeModuleTest {
+public class PathCalcRuntimeModuleTest extends UnitTest {
     private static final Long LOCAL_PORT = 0xFFFEL;
 
     private IntentTestMocks mocks;
@@ -171,7 +170,6 @@
     @After
     public void tearDown() {
         mocks.tearDownIntentMocks();
-        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     private static final String BAD_SWITCH_INTENT_NAME = "No Such Switch Intent";
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
index 87e096f..990ca6b 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
@@ -28,7 +28,6 @@
 import net.onrc.onos.core.intent.PathIntentMap;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
-import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.registry.IControllerRegistryService;
 import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.ITopologyListener;
@@ -41,8 +40,7 @@
 import net.onrc.onos.core.topology.TopologyEvents;
 import net.onrc.onos.core.util.SwitchPort;
 
-import com.codahale.metrics.MetricFilter;
-
+import net.onrc.onos.core.util.UnitTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -60,7 +58,7 @@
  */
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(PathCalcRuntimeModule.class)
-public class UseCaseTest {
+public class UseCaseTest extends UnitTest {
     private static final Logger log = LoggerFactory.getLogger(UseCaseTest.class);
 
     private Topology topology;
@@ -137,7 +135,6 @@
         verify(controllerRegistryService);
         PowerMock.verify(persistIntent, PersistIntent.class);
         verify(restApi);
-        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     private void showResult(PathIntentMap intents) {
diff --git a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
index ae0a936..9bdffd5 100644
--- a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
+++ b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
@@ -1,45 +1,47 @@
 package net.onrc.onos.core.topology;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.*;
-import static org.hamcrest.Matchers.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
 import net.floodlightcontroller.core.IFloodlightProviderService.Role;
 import net.floodlightcontroller.util.MACAddress;
 import net.onrc.onos.core.datagrid.IDatagridService;
 import net.onrc.onos.core.datagrid.IEventChannel;
 import net.onrc.onos.core.datagrid.IEventChannelListener;
-import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.registry.IControllerRegistryService;
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.OnosInstanceId;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.SwitchPort;
 import net.onrc.onos.core.util.TestUtils;
-
-import com.codahale.metrics.MetricFilter;
+import net.onrc.onos.core.util.UnitTest;
 import org.easymock.EasyMock;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
 /**
  * Unit tests for the TopologyManager class in the Topology module.
  * These test cases only check the sanity of functions in the TopologyManager.
  * Note that we do not test the eventHandler functions in the TopologyManager class.
  * DatagridService, DataStoreService, eventChannel, and controllerRegistryService are mocked out.
  */
-public class TopologyManagerTest {
+public class TopologyManagerTest extends UnitTest {
     private TopologyManager theTopologyManager;
     private final String eventChannelName = "onos.topology";
     private IEventChannel<byte[], TopologyEvent> eventChannel;
@@ -128,11 +130,6 @@
         TestUtils.setField(theTopologyManager, "datastore", dataStoreService);
     }
 
-    @After
-    public void tearDown() throws Exception {
-        OnosMetrics.removeMatching(MetricFilter.ALL);
-    }
-
     /**
      * Test the Switch discovered and Port discovered functions.
      */
diff --git a/src/test/java/net/onrc/onos/core/util/UnitTest.java b/src/test/java/net/onrc/onos/core/util/UnitTest.java
new file mode 100644
index 0000000..3660aff
--- /dev/null
+++ b/src/test/java/net/onrc/onos/core/util/UnitTest.java
@@ -0,0 +1,28 @@
+package net.onrc.onos.core.util;
+
+import com.codahale.metrics.MetricFilter;
+import net.onrc.onos.core.metrics.OnosMetrics;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ * Base class that Unit Tests should inherit from.
+ */
+public class UnitTest {
+
+    /**
+     * Performs initialization operations requred by all unit tests.
+     */
+    @Before
+    public void setUpBase() {}
+
+    /**
+     * Performs clean up operations required by all unit tests.
+     */
+    @After
+    public void tearDownBase() {
+        // Destroy any metrics created during the execution of the test.
+        OnosMetrics.removeMatching(MetricFilter.ALL);
+    }
+
+}
