diff --git a/containers-docker-local/src/test/java/org/apache/aries/containers/docker/local/impl/LocalDockerControllerTest.java b/containers-docker-local/src/test/java/org/apache/aries/containers/docker/local/impl/LocalDockerControllerTest.java
index 4edd1b1..85312d0 100644
--- a/containers-docker-local/src/test/java/org/apache/aries/containers/docker/local/impl/LocalDockerControllerTest.java
+++ b/containers-docker-local/src/test/java/org/apache/aries/containers/docker/local/impl/LocalDockerControllerTest.java
@@ -44,7 +44,7 @@
     public void testKill() throws Exception {
         LocalDockerController ldc = new LocalDockerController() {
             @Override
-            String runCommandExpectSingleID(String... command) throws IOException {
+            String runCommand(String... command) throws IOException {
                 assertArrayEquals(new String [] {"docker", "kill", "-s", "KILL", "123abc"}, command);
                 return "ok";
             }
@@ -56,7 +56,7 @@
     public void testKillSignal() throws Exception {
         LocalDockerController ldc = new LocalDockerController() {
             @Override
-            String runCommandExpectSingleID(String... command) throws IOException {
+            String runCommand(String... command) throws IOException {
                 assertArrayEquals(new String [] {"docker", "kill", "-s", "TERM", "123abc"}, command);
                 return "ok";
             }
@@ -68,7 +68,7 @@
     public void testRemove() throws Exception {
         LocalDockerController ldc = new LocalDockerController() {
             @Override
-            String runCommandExpectSingleID(String... command) throws IOException {
+            String runCommand(String... command) throws IOException {
                 assertArrayEquals(new String [] {"docker", "rm", "-f", "123abc"}, command);
                 return "ok";
             }
@@ -94,7 +94,6 @@
     @Test
     public void testPS() throws Exception {
         LocalDockerController ldc = new LocalDockerController() {
-
             @Override
             String runCommand(String... command) {
                 assertArrayEquals(new String [] {
@@ -108,7 +107,6 @@
     @Test
     public void testPS2() throws Exception {
         LocalDockerController ldc = new LocalDockerController() {
-
             @Override
             String runCommand(String... command) {
                 assertArrayEquals(new String [] {
@@ -118,4 +116,23 @@
         };
         assertEquals(Collections.emptyList(), ldc.ps("mylabel"));
     }
+
+    @Test
+    public void testInspect() throws IOException {
+        LocalDockerController ldc = new LocalDockerController() {
+            @Override
+            String runCommand(String... command) {
+                assertArrayEquals(new String [] {
+                        "docker", "inspect", "a1", "b2"}, command);
+                return "[\"some_json\"]";
+            }
+        };
+        assertEquals("[\"some_json\"]", ldc.inspect(Arrays.asList("a1", "b2")));
+    }
+
+    @Test
+    public void testInspect2() throws IOException {
+        LocalDockerController ldc = new LocalDockerController();
+        assertEquals("[]", ldc.inspect(Collections.emptyList()));
+    }
 }
