diff --git a/pom.xml b/pom.xml
index 5449eaa3b896f5f4a1e06d0cb05845ef7afda4cb..089b5fb8ed7d34fb08a7d168150953e0d778bede 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,12 @@
             <version>4.11</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>1.10.8</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/src/main/java/com/github/joelittlejohn/embedmongo/DataInitializer.java b/src/main/java/com/github/joelittlejohn/embedmongo/DataInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..17a3c4c6e58ad3fdabca8fc2f4f289c38325ed07
--- /dev/null
+++ b/src/main/java/com/github/joelittlejohn/embedmongo/DataInitializer.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright © 2012 Joe Littlejohn
+ *
+ * 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 com.github.joelittlejohn.embedmongo;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.UnknownHostException;
+import java.util.Scanner;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import com.mongodb.CommandResult;
+import com.mongodb.DB;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoException;
+
+/**
+ * When invoked, this goal connects to an instance of mongo and execute some instructions
+ * to add data.
+ *
+ * You should use the same javascript syntax that you would use in the mongo client.
+ */
+public class DataInitializer {
+
+    private File initDirectory;
+    private int port;
+    private String databaseName;
+    private Log logger;
+
+    public DataInitializer(File initDirectory, int port, String databaseName, Log logger) {
+        this.initDirectory = initDirectory;
+        this.port = port;
+        this.databaseName = databaseName;
+        this.logger = logger;
+    }
+
+    public void insertData() throws MojoExecutionException, MojoFailureException {
+        if (initDirectory.isDirectory()) {
+            Scanner scanner = null;
+            StringBuilder instructions = new StringBuilder();
+            File[] files = initDirectory.listFiles();
+            if (files != null && files.length > 0) {
+                logger.info("Folder " + initDirectory.getAbsolutePath() + " contains " + files.length + " file(s):");
+                DB db = getConnectToMongoAndGetDatabase();
+                for (File file : files) {
+                    try {
+                        scanner = new Scanner(file);
+                        while (scanner.hasNextLine()) {
+                            instructions.append(scanner.nextLine()).append("\n");
+                        }
+                    } catch (FileNotFoundException e) {
+                        throw new MojoExecutionException("Unable to find file with name '" + file.getName() + "'", e);
+                    } finally {
+                        if (scanner != null) {
+                            scanner.close();
+                        }
+                    }
+                    CommandResult result;
+                    try {
+                        result = db.doEval("(function() {" + instructions.toString() + "})();", new Object[0]);
+                    } catch (MongoException e) {
+                        throw new MojoExecutionException("Unable to execute file with name '" + file.getName() + "'", e);
+                    }
+                    if (!result.ok()) {
+                        logger.error("- file " + file.getName() + " parsed with error: " + result.getErrorMessage());
+                        throw new MojoExecutionException("Error while executing instructions from file '"+file.getName()+"': " + result.getErrorMessage(), result.getException());
+                    }
+                    logger.info("- file " + file.getName() + " parsed successfully");
+                }
+                logger.info("Data initialized with success");
+            } else {
+                logger.info("No data to initialize");
+            }
+        }
+    }
+
+    DB getConnectToMongoAndGetDatabase() throws MojoExecutionException {
+        if (databaseName == null || databaseName.trim().length() == 0) {
+            throw new MojoExecutionException("Database name is missing");
+        }
+
+        MongoClient mongoClient;
+        try {
+            mongoClient = new MongoClient("localhost", port);
+        } catch (UnknownHostException e) {
+            throw new MojoExecutionException("Unable to connect to mongo instance", e);
+        }
+        logger.info("Connected to MongoDB");
+        return mongoClient.getDB(databaseName);
+    }
+}
diff --git a/src/main/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojo.java b/src/main/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojo.java
deleted file mode 100644
index f20db308c965a03517d3d1e4397fd6cf4d3b1b65..0000000000000000000000000000000000000000
--- a/src/main/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojo.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Copyright © 2012 Joe Littlejohn
- *
- * 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 com.github.joelittlejohn.embedmongo;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.UnknownHostException;
-import java.util.Scanner;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import com.mongodb.CommandResult;
-import com.mongodb.DB;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoException;
-
-/**
- * When invoked, this goal connects to an instance of mongo and execute some instructions
- * to add data.
- *
- * You should use the same javascript syntax that you would use in the mongo client.
- *
- * @goal init-data
- * @phase pre-integration-test
- */
-public class InitDataMongoMojo extends AbstractMojo {
-
-    /**
-     * Folder that contains all scripts to execute.
-     * @parameter
-     * @required
-     */
-    private File dataFolder;
-
-    /**
-     * Optional. Specify the port only if you want have a different one from the default value.
-     * Default value is 27017.
-     * @parameter
-     */
-    private int port;
-
-    /**
-     * The name of the database where data will be stored.
-     * @parameter
-     * @required
-     */
-    private String databaseName;
-
-    @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        DB db = getConnectToMongoAndGetDatabase();
-
-        if (dataFolder.isDirectory()) {
-            Scanner scanner = null;
-            StringBuilder instructions = new StringBuilder();
-            File[] files = dataFolder.listFiles();
-            getLog().info("Folder " + dataFolder.getAbsolutePath() + " contains " + files.length + " file(s):");
-            for (File file : files) {
-                try {
-                    scanner = new Scanner(file);
-                    while (scanner.hasNextLine()) {
-                        instructions.append(scanner.nextLine()).append("\n");
-                    }
-                } catch (FileNotFoundException e) {
-                    throw new MojoExecutionException("Unable to find file with name '" + file.getName() + "'", e);
-                } finally {
-                    if (scanner != null) {
-                        scanner.close();
-                    }
-                }
-                CommandResult result;
-                try {
-                    result = db.doEval("(function() {" + instructions.toString() + "})();", new Object[0]);
-                } catch (MongoException e) {
-                    throw new MojoExecutionException("Unable to execute file with name '" + file.getName() + "'", e);
-                }
-                if (!result.ok()) {
-                    getLog().error("- file " + file.getName() + " parsed with error: " + result.getErrorMessage());
-                    throw new MojoExecutionException("Error while executing instructions from file '"+file.getName()+"': " + result.getErrorMessage(), result.getException());
-                }
-                getLog().info("- file " + file.getName() + " parsed successfully");
-            }
-            getLog().info("Data initialized with success");
-        }
-    }
-
-    private DB getConnectToMongoAndGetDatabase() throws MojoExecutionException {
-        if (databaseName == null || databaseName.trim().length() == 0) {
-            throw new MojoExecutionException("Database name is missing");
-        }
-
-        MongoClient mongoClient;
-        try {
-            mongoClient = new MongoClient("localhost", port == 0 ? 27017 : port);
-        } catch (UnknownHostException e) {
-            throw new MojoExecutionException("Unable to connect to mongo instance", e);
-        }
-        getLog().info("Connected to MongoDB");
-        return mongoClient.getDB(databaseName);
-    }
-
-    protected InitDataMongoMojo setDataFolder(File dataFolder) {
-        this.dataFolder = dataFolder;
-        return this;
-    }
-
-    protected InitDataMongoMojo setDatabaseName(String databaseName) {
-        this.databaseName = databaseName;
-        return this;
-    }
-}
diff --git a/src/main/java/com/github/joelittlejohn/embedmongo/StartEmbeddedMongoMojo.java b/src/main/java/com/github/joelittlejohn/embedmongo/StartEmbeddedMongoMojo.java
index d18124876fbd486e38ed736794d43dea87cde3bd..fb0ac3778bb48c2a8fb9be3492fd5efd45a90b69 100644
--- a/src/main/java/com/github/joelittlejohn/embedmongo/StartEmbeddedMongoMojo.java
+++ b/src/main/java/com/github/joelittlejohn/embedmongo/StartEmbeddedMongoMojo.java
@@ -211,6 +211,20 @@ public class StartEmbeddedMongoMojo extends AbstractMojo {
      */
     private boolean skip;
 
+    /**
+     * The name of the database where data will be stored.
+     * @parameter
+     * @required
+     */
+    private String databaseName;
+
+    /**
+     * Folder that contains all scripts to execute.
+     * @parameter
+     * @required
+     */
+    private File initDirectory;
+
     @Override
     @SuppressWarnings("unchecked")
     public void execute() throws MojoExecutionException, MojoFailureException {
@@ -284,6 +298,8 @@ public class StartEmbeddedMongoMojo extends AbstractMojo {
         } catch (IOException e) {
             throw new MojoExecutionException("Unable to start the mongod", e);
         }
+
+        new DataInitializer(initDirectory, port, databaseName, getLog()).insertData();
     }
 
     /**
diff --git a/src/test/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojoTest.java b/src/test/java/com/github/joelittlejohn/embedmongo/DataInitializerTest.java
similarity index 56%
rename from src/test/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojoTest.java
rename to src/test/java/com/github/joelittlejohn/embedmongo/DataInitializerTest.java
index c537e242b95e93bd117f14d6b7d02ff06b7dd40f..ae7da20a23c483d91e6f725016de3a1048291972 100644
--- a/src/test/java/com/github/joelittlejohn/embedmongo/InitDataMongoMojoTest.java
+++ b/src/test/java/com/github/joelittlejohn/embedmongo/DataInitializerTest.java
@@ -16,19 +16,31 @@
 package com.github.joelittlejohn.embedmongo;
 
 import static org.junit.Assert.fail;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.net.UnknownHostException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.junit.Ignore;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugin.logging.SystemStreamLog;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.runners.MockitoJUnitRunner;
+import com.mongodb.CommandResult;
+import com.mongodb.DB;
+import com.mongodb.EmbedMongoDB;
 
-public class InitDataMongoMojoTest {
+@RunWith(MockitoJUnitRunner.class)
+public class DataInitializerTest {
 
     @Rule
     public TemporaryFolder createSchemaFolder = new TemporaryFolder();
@@ -36,37 +48,44 @@ public class InitDataMongoMojoTest {
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
+    private final static int PORT = 27017;
+    private final static Log LOGGER = new SystemStreamLog();
     private File rootFolder;
     private File rootFolderWithError;
 
-    @Ignore("Need an instance of MongoDB to pass")
     @Test public void
     should_execute_instructions() throws MojoFailureException, MojoExecutionException, IOException {
         initFolder();
         try {
-            new InitDataMongoMojo().setDatabaseName("myDB").setDataFolder(rootFolder).execute();
+            new DataInitializerForTest(rootFolder, PORT, "myDB", LOGGER).insertData();
         } catch (Exception e) {
+            e.printStackTrace();
             fail("Should not fail!");
         }
     }
 
     @Test public void
-    should_fail_when_database_name_is_not_provided() throws MojoFailureException, MojoExecutionException {
+    should_fail_when_database_name_is_not_provided() throws MojoFailureException, MojoExecutionException, IOException {
+        initFolder();
+
         thrown.expect(MojoExecutionException.class);
         thrown.expectMessage("Database name is missing");
 
-        new InitDataMongoMojo().execute();
+        new DataInitializer(rootFolder, PORT, null, LOGGER).insertData();
     }
 
-    @Ignore("Need an instance of MongoDB to pass")
     @Test public void
     should_fail_to_execute_instruction_with_error() throws IOException, MojoFailureException, MojoExecutionException {
+        DB database = mock(DB.class);
         initFolderWithError();
 
+        CommandResult result = new EmbedMongoDB("myDB").notOkErrorResult("Error while executing instructions from file '" + rootFolderWithError.listFiles()[0].getName());
+        given(database.doEval(anyString(), Matchers.<Object>anyVararg())).willReturn(result);
+
         thrown.expect(MojoExecutionException.class);
         thrown.expectMessage("Error while executing instructions from file '" + rootFolderWithError.listFiles()[0].getName());
 
-        new InitDataMongoMojo().setDatabaseName("myDB").setDataFolder(rootFolderWithError).execute();
+        new DataInitializerForTest(rootFolderWithError, PORT, "myDB", LOGGER, database).insertData();
     }
 
     private void initFolder() throws IOException {
@@ -87,16 +106,35 @@ public class InitDataMongoMojoTest {
 
     private void initFolderWithError() throws IOException {
         File instructionsFile = createSchemaFolder.newFile();
-        BufferedWriter out = null;
+        BufferedWriter reader = null;
         try {
-            out = new BufferedWriter(new FileWriter(instructionsFile));
-            out.write("db.unknownInstruction();\n");
+            reader = new BufferedWriter(new FileWriter(instructionsFile));
+            reader.write("db.unknownInstruction();\n");
         } finally {
-            if (out != null) {
-                out.close();
+            if (reader != null) {
+                reader.close();
             }
         }
         rootFolderWithError = instructionsFile.getParentFile();
         rootFolderWithError.mkdir();
     }
+
+    static class DataInitializerForTest extends DataInitializer {
+
+        private final DB database;
+
+        public DataInitializerForTest(File dataFolder, int port, String databaseName, Log logger) throws UnknownHostException {
+            this(dataFolder, port, databaseName, logger, new EmbedMongoDB("myDB"));
+        }
+
+        public DataInitializerForTest(File dataFolder, int port, String databaseName, Log logger, DB database) {
+            super(dataFolder, port, databaseName, logger);
+            this.database = database;
+        }
+
+        @Override
+        DB getConnectToMongoAndGetDatabase() throws MojoExecutionException {
+            return database;
+        }
+    }
 }
diff --git a/src/test/java/com/github/joelittlejohn/embedmongo/PortUtilsTest.java b/src/test/java/com/github/joelittlejohn/embedmongo/PortUtilsTest.java
index fcb9198a7d2208641ac6ffd93a77c4a9bb870885..63afc42bbc35d7e150d8acf3181a56ab159801d3 100644
--- a/src/test/java/com/github/joelittlejohn/embedmongo/PortUtilsTest.java
+++ b/src/test/java/com/github/joelittlejohn/embedmongo/PortUtilsTest.java
@@ -22,7 +22,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-
 import org.junit.After;
 import org.junit.Test;
 
diff --git a/src/test/java/com/mongodb/EmbedMongoClient.java b/src/test/java/com/mongodb/EmbedMongoClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..9011c26bc4fb95c07a27b32a0fcdfd37aab691e2
--- /dev/null
+++ b/src/test/java/com/mongodb/EmbedMongoClient.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright © 2012 Joe Littlejohn
+ *
+ * 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 com.mongodb;
+
+import java.net.UnknownHostException;
+
+public class EmbedMongoClient extends MongoClient {
+
+    public EmbedMongoClient() throws UnknownHostException {
+    }
+}
diff --git a/src/test/java/com/mongodb/EmbedMongoDB.java b/src/test/java/com/mongodb/EmbedMongoDB.java
new file mode 100644
index 0000000000000000000000000000000000000000..73143464003100d29dda0d13f7ba5e998a5a170f
--- /dev/null
+++ b/src/test/java/com/mongodb/EmbedMongoDB.java
@@ -0,0 +1,85 @@
+/**
+ * Copyright © 2012 Joe Littlejohn
+ *
+ * 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 com.mongodb;
+
+import java.net.UnknownHostException;
+import java.util.Set;
+
+public class EmbedMongoDB extends DB {
+
+    public EmbedMongoDB(String name) throws UnknownHostException {
+        super(new EmbedMongoClient(), name);
+    }
+
+    public CommandResult notOkErrorResult(String message) {
+        try {
+            CommandResult commandResult = new CommandResult(new ServerAddress("localhost"));
+            commandResult.put("errmsg", message);
+            commandResult.put("ok", 0);
+            return commandResult;
+        } catch (UnknownHostException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CommandResult doEval(String code, Object... args) {
+        CommandResult commandResult;
+        try {
+            commandResult = new CommandResult(new ServerAddress("localhost"));
+            commandResult.put("ok", 1.0);
+            commandResult.put("retval", "null");
+        } catch (UnknownHostException e) {
+            return notOkErrorResult(e.getMessage());
+        }
+        return commandResult;
+    }
+
+    @Override
+    public void requestStart() {
+
+    }
+
+    @Override
+    public void requestDone() {
+
+    }
+
+    @Override
+    public void requestEnsureConnection() {
+
+    }
+
+    @Override
+    protected DBCollection doGetCollection(String name) {
+        return null;
+    }
+
+    @Override
+    public Set<String> getCollectionNames() {
+        return null;
+    }
+
+    @Override
+    CommandResult doAuthenticate(MongoCredential credentials) {
+        return null;
+    }
+
+    @Override
+    public void cleanCursors(boolean force) {
+
+    }
+}