diff --git a/core/store/persistence/src/test/java/org/onosproject/persistence/impl/MapDBTest.java b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/MapDBTest.java
new file mode 100644
index 0000000..ac5d353
--- /dev/null
+++ b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/MapDBTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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.
+ */
+package org.onosproject.persistence.impl;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+import org.mapdb.DB;
+import org.mapdb.DBMaker;
+
+/**
+ * Utils for Tests using MapDB.
+ */
+public abstract class MapDBTest {
+
+    @Rule
+    public TemporaryFolder tmpFolder = new TemporaryFolder();
+
+    protected DB fakeDB = null;
+
+    /**
+     * Set up the database.
+     *
+     * @throws Exception if instantiation fails
+     */
+    @Before
+    public void setUpDB() throws Exception {
+        // Creates a db
+        fakeDB = DBMaker
+                .newFileDB(tmpFolder.newFile())
+                .asyncWriteEnable()
+                .commitFileSyncDisable()
+                .mmapFileEnableIfSupported()
+                .closeOnJvmShutdown()
+                .deleteFilesAfterClose()
+                .make();
+    }
+
+    /**
+     * Closes the database.
+     *
+     * @throws Exception if shutdown fails
+     */
+    @After
+    public void tearDownDB() throws Exception {
+        fakeDB.close();
+    }
+}
diff --git a/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentMapTest.java b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentMapTest.java
index 6c10db5..caf5501 100644
--- a/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentMapTest.java
+++ b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentMapTest.java
@@ -17,13 +17,8 @@
 package org.onosproject.persistence.impl;
 
 import com.google.common.collect.Maps;
-import org.junit.After;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mapdb.DB;
-import org.mapdb.DBMaker;
 import org.onosproject.store.service.Serializer;
 
 import java.util.Map;
@@ -37,13 +32,9 @@
 /**
  * Test suite for Persistent Map.
  */
-public class PersistentMapTest {
+public class PersistentMapTest extends MapDBTest {
 
-    private Map<Integer, Integer> map = null;
-    private DB fakeDB = null;
-
-    @Rule
-    public TemporaryFolder tmpFolder = new TemporaryFolder();
+    private PersistentMap<Integer, Integer> map = null;
 
     /**
      * Set up the database, create a map and a direct executor to handle it.
@@ -52,13 +43,8 @@
      */
     @Before
     public void setUp() throws Exception {
-        //Creates a db, a map within it and a basic integer serializer (async writing is off)
-        fakeDB = DBMaker
-                .newFileDB(tmpFolder.newFile("testDb"))
-                .asyncWriteEnable()
-                .closeOnJvmShutdown()
-                .make();
-        map = new PersistentMap<Integer, Integer>(new Serializer() {
+        //Creates, a map within it and a basic integer serializer
+        map = new PersistentMap<>(new Serializer() {
             @Override
             public <T> byte[] encode(T object) {
                 if (object == null) {
@@ -86,31 +72,18 @@
                 num = num | bytes[2] << 8;
                 num = num | bytes[3];
 
-                return (T) new java.lang.Integer(num);
+                return (T) Integer.valueOf(num);
             }
         }, fakeDB, "map");
     }
 
-    /**
-     * Clears and deletes the map, closes the datbase and deletes the file.
-     *
-     * @throws Exception if shutdown fails
-     */
-    @After
-    public void tearDown() throws Exception {
-        map.clear();
-        fakeDB.delete("map:map");
-        fakeDB.commit();
-        fakeDB.close();
-    }
-
     @Test
     public void testRemove() throws Exception {
         //Checks removal and return values
         fillMap(10);
         assertEquals(10, map.size());
         for (int i = 0; i < 10; i++) {
-            assertEquals("The previous value was wrong.", new Integer(i), map.remove(i));
+            assertEquals("The previous value was wrong.", Integer.valueOf(i), map.remove(i));
             assertNull("The previous value was wrong.", map.remove(i));
             //(i+1) compensates for base zero.
             assertEquals("The size was wrong.", 10 - (i + 1), map.size());
@@ -160,7 +133,7 @@
         for (int i = 0; i < 10; i++) {
             map.put(i, i);
             for (int j = 0; j <= i; j++) {
-                assertEquals("The value was wrong.", new Integer(j), map.get(j));
+                assertEquals("The value was wrong.", Integer.valueOf(j), map.get(j));
             }
         }
         assertNull("Null return value for nonexistent keys.", map.get(10));
@@ -226,7 +199,7 @@
         //Tests insertion behavior (particularly the returning of previous value)
         fillMap(10);
         for (int i = 0; i < 10; i++) {
-            assertEquals("Put should return the previous value", new Integer(i), map.put(i, i + 1));
+            assertEquals("Put should return the previous value", Integer.valueOf(i), map.put(i, i + 1));
         }
         assertNull(map.put(11, 11));
     }
diff --git a/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentSetTest.java b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentSetTest.java
index 39a2298..a5df479 100644
--- a/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentSetTest.java
+++ b/core/store/persistence/src/test/java/org/onosproject/persistence/impl/PersistentSetTest.java
@@ -17,13 +17,8 @@
 package org.onosproject.persistence.impl;
 
 import com.google.common.collect.Sets;
-import org.junit.After;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mapdb.DB;
-import org.mapdb.DBMaker;
 import org.onosproject.store.service.Serializer;
 
 import java.util.HashSet;
@@ -40,23 +35,14 @@
 /**
  * Test suite for Persistent Set.
  */
-public class PersistentSetTest {
+public class PersistentSetTest extends MapDBTest {
 
-    private Set<Integer> set = null;
-    private DB fakeDB = null;
-
-    @Rule
-    public TemporaryFolder tmpFolder = new TemporaryFolder();
+    private PersistentSet<Integer> set = null;
 
     @Before
     public void setUp() throws Exception {
-        //Creates a db, a set within it and a basic integer serializer (async writing is off)
-        fakeDB = DBMaker
-                .newFileDB(tmpFolder.newFile("testDb"))
-                .asyncWriteEnable()
-                .closeOnJvmShutdown()
-                .make();
-        set = new PersistentSet<Integer>(new Serializer() {
+        //Creates a set within it and a basic integer serializer
+        set = new PersistentSet<>(new Serializer() {
             @Override
             public <T> byte[] encode(T object) {
                 if (object == null) {
@@ -84,20 +70,12 @@
                 num = num | bytes[2] << 8;
                 num = num | bytes[3];
 
-                return (T) new java.lang.Integer(num);
+                return (T) Integer.valueOf(num);
             }
         }, fakeDB, "set");
 
     }
 
-    @After
-    public void tearDown() throws Exception {
-        set.clear();
-        fakeDB.delete("map:map");
-        fakeDB.commit();
-        fakeDB.close();
-    }
-
     @Test
     public void testSize() throws Exception {
         //Check correct sizing throughout population
