diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java b/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
index b7f6d79..a953149 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentDataTest.java
@@ -15,60 +15,23 @@
  */
 package org.onosproject.net.intent;
 
-import java.util.Collections;
-import java.util.concurrent.atomic.AtomicLong;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.core.IdGenerator;
-import org.onosproject.net.NetTestTools;
 import org.onosproject.store.Timestamp;
 
 import com.google.common.testing.EqualsTester;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
+import static org.onosproject.net.intent.IntentTestsMocks.MockIntent;
+import static org.onosproject.net.intent.IntentTestsMocks.MockTimestamp;
 
 /**
  * Unit tests for intent data objects.
  */
 public class IntentDataTest {
-    private static class MockIntent extends Intent {
-        private static AtomicLong counter = new AtomicLong(0);
-
-        private final Long number;
-
-        public MockIntent(Long number) {
-            super(NetTestTools.APP_ID, Collections.emptyList());
-            this.number = number;
-        }
-
-        public Long number() {
-            return number;
-        }
-
-        public static Long nextId() {
-            return counter.getAndIncrement();
-        }
-    }
-
-    private static class MockTimestamp implements Timestamp {
-        final int value;
-
-        MockTimestamp(int value) {
-            this.value = value;
-        }
-
-        @Override
-        public int compareTo(Timestamp o) {
-            if (!(o instanceof MockTimestamp)) {
-                return -1;
-            }
-            MockTimestamp that = (MockTimestamp) o;
-            return (this.value > that.value ? -1 : (this.value == that.value ? 0 : 1));
-        }
-    }
 
     private Timestamp timestamp1;
     private Timestamp timestamp2;
diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
index d78c62c..700df0e 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java
@@ -36,6 +36,7 @@
 import org.onosproject.net.ElementId;
 import org.onosproject.net.Link;
 import org.onosproject.net.NetTestTools;
+import org.onosproject.net.NetworkResource;
 import org.onosproject.net.Path;
 import org.onosproject.net.flow.FlowId;
 import org.onosproject.net.flow.FlowRule;
@@ -60,6 +61,8 @@
 import org.onosproject.net.topology.TopologyVertex;
 import org.onosproject.store.Timestamp;
 
+import com.google.common.base.MoreObjects;
+
 /**
  * Common mocks used by the intent framework tests.
  */
@@ -384,6 +387,11 @@
             this.number = number;
         }
 
+        public MockIntent(Long number, Collection<NetworkResource> resources) {
+            super(NetTestTools.APP_ID, resources);
+            this.number = number;
+        }
+
         public Long number() {
             return number;
         }
@@ -391,6 +399,14 @@
         public static Long nextId() {
             return counter.getAndIncrement();
         }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(getClass())
+                    .add("id", id())
+                    .add("appId", appId())
+                    .toString();
+        }
     }
 
     public static class MockTimestamp implements Timestamp {
