diff --git a/pom.xml b/pom.xml
index 3ddf179..75ecf91 100644
--- a/pom.xml
+++ b/pom.xml
@@ -226,18 +226,18 @@
 
         <!-- Testing -->
         <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.testing</artifactId>
-            <version>2.0.24</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-all</artifactId>
             <version>1.9.5</version>
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <version>2.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
             <version>2.6.2</version>
@@ -255,6 +255,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-junit4</artifactId>
+            <version>2.12.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>junit-addons</groupId>
             <artifactId>junit-addons</artifactId>
             <version>1.4</version>
@@ -262,8 +268,13 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.testing.sling-mock-oak</artifactId>
-            <version>2.1.10-1.16.0</version>
+            <artifactId>org.apache.sling.testing.jcr-mock</artifactId>
+            <version>1.5.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java b/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
index 700d47a..1e93ed8 100644
--- a/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
+++ b/src/test/java/org/apache/sling/jcr/resource/internal/helper/JcrNodeResourceIteratorTest.java
@@ -18,20 +18,24 @@
  */
 package org.apache.sling.jcr.resource.internal.helper;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.NoSuchElementException;
 import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
+import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.external.URIProvider;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
-import org.apache.sling.commons.testing.jcr.MockNode;
-import org.apache.sling.commons.testing.jcr.MockNodeIterator;
 import org.apache.sling.jcr.resource.internal.HelperData;
 import org.apache.sling.jcr.resource.internal.helper.jcr.JcrNodeResourceIterator;
+import org.apache.sling.testing.mock.jcr.MockJcr;
 
 import junit.framework.TestCase;
 
@@ -42,7 +46,8 @@
     }
 
     public void testEmpty() {
-        NodeIterator ni = new MockNodeIterator(null);
+        NodeIterator ni = new NodeIteratorAdapter(Collections.emptyIterator());
+
         JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
 
         assertFalse(ri.hasNext());
@@ -57,8 +62,9 @@
 
     public void testSingle() throws RepositoryException {
         String path = "/parent/path/node";
-        Node node = new MockNode(path);
-        NodeIterator ni = new MockNodeIterator(new Node[] { node });
+        Session session = MockJcr.newSession();
+        Node node = JcrUtils.getOrCreateByPath(path, "nt:folder", session);
+        NodeIterator ni = new NodeIteratorAdapter(Collections.singleton(node));
         JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
 
         assertTrue(ri.hasNext());
@@ -79,11 +85,12 @@
     public void testMulti() throws RepositoryException {
         int numNodes = 10;
         String pathBase = "/parent/path/node/";
+        Session session = MockJcr.newSession();
         Node[] nodes = new Node[numNodes];
         for (int i=0; i < nodes.length; i++) {
-            nodes[i] = new MockNode(pathBase + i, "some:type" + i);
+            nodes[i] = JcrUtils.getOrCreateByPath(pathBase + i, "nt:folder", session);
         }
-        NodeIterator ni = new MockNodeIterator(nodes);
+        NodeIterator ni = new NodeIteratorAdapter(Arrays.asList(nodes));
         JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, null, null, ni, getHelperData(), null);
 
         for (int i=0; i < nodes.length; i++) {
@@ -105,8 +112,9 @@
 
     public void testRoot() throws RepositoryException {
         String path = "/child";
-        Node node = new MockNode(path);
-        NodeIterator ni = new MockNodeIterator(new Node[] { node });
+        Session session = MockJcr.newSession();
+        Node node = session.getRootNode().addNode("child");
+        NodeIterator ni = new NodeIteratorAdapter(Collections.singleton(node));
         JcrNodeResourceIterator ri = new JcrNodeResourceIterator(null, "/", null, ni, getHelperData(), null);
 
         assertTrue(ri.hasNext());
