diff --git a/appc-common/src/test/java/org/onap/appc/util/JsonUtilTest.java b/appc-common/src/test/java/org/onap/appc/util/JsonUtilTest.java
new file mode 100644
index 0000000..6d2ac70
--- /dev/null
+++ b/appc-common/src/test/java/org/onap/appc/util/JsonUtilTest.java
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.util;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonParseException;
+import java.io.FileNotFoundException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+
+public class JsonUtilTest {
+
+    @Test(expected = NullPointerException.class)
+    public void should_throw_exception_when_json_string_is_null() throws IOException {
+
+        JsonUtil.convertJsonStringToFlatMap(null);
+    }
+
+    @Test(expected = JsonParseException.class)
+    public void should_throw_exception_when_invalid_json_string() throws IOException {
+
+        JsonUtil.convertJsonStringToFlatMap("{key: value}");
+    }
+
+    @Test
+    public void should_convert_json_string_to_flat_map() throws IOException {
+
+        String jsonString = "{\"A\":\"A-value\",\"B\":{\"C\":\"B.C-value\",\"D\":\"B.D-value\"}}";
+        Map<String, String> flatMap = JsonUtil.convertJsonStringToFlatMap(jsonString);
+
+        Map<String, String> expectedMap = new HashMap<>();
+        expectedMap.put("A", "A-value");
+        expectedMap.put("B.C", "B.C-value");
+        expectedMap.put("B.D", "B.D-value");
+
+        assertEquals(expectedMap, flatMap);
+        assertNotNull(flatMap);
+    }
+
+    @Test
+    public void should_convert_json_string_to_flat_map_with_nested_json() throws IOException {
+
+        String jsonString = "{\"A\":\"A-value\",\"B\":\"{\\\"C\\\":\\\"C-value\\\",\\\"D\\\":\\\"D-value\\\"}\"}";
+        Map<String, String> flatMap = JsonUtil.convertJsonStringToFlatMap(jsonString);
+
+        Map<String, String> expectedMap = new HashMap<>();
+        expectedMap.put("A", "A-value");
+        expectedMap.put("B", "{\"C\":\"C-value\",\"D\":\"D-value\"}");
+
+        assertEquals(expectedMap, flatMap);
+        assertNotNull(flatMap);
+    }
+
+    @Test(expected = FileNotFoundException.class)
+    public void should_throw_exception_when_not_found_json_file() throws IOException {
+        JsonUtil.readInputJson("not-existing.json", DummyClass.class);
+    }
+
+
+    @Test(expected = JsonParseException.class)
+    public void should_throw_exception_when_invalid_json_file() throws IOException {
+        JsonUtil.readInputJson("/invalid.json", DummyClass.class);
+    }
+
+    @Test
+    public void should_parse_valid_json_file () throws IOException {
+        DummyClass dummyClass = JsonUtil.readInputJson("/valid.json", DummyClass.class);
+
+        assertEquals("dummy name", dummyClass.getName());
+        assertEquals(99, dummyClass.getValue());
+    }
+
+    private static class DummyClass {
+
+        private String name;
+        private int value;
+
+        public DummyClass(@JsonProperty("name") String name, @JsonProperty("value") int someValue) {
+            this.name = name;
+            this.value = someValue;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+}
+
+
diff --git a/appc-common/src/test/java/org/onap/appc/util/MessageFormatterTest.java b/appc-common/src/test/java/org/onap/appc/util/MessageFormatterTest.java
new file mode 100644
index 0000000..27f309f
--- /dev/null
+++ b/appc-common/src/test/java/org/onap/appc/util/MessageFormatterTest.java
@@ -0,0 +1,18 @@
+package org.onap.appc.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MessageFormatterTest {
+
+    @Test
+    public void testEscapeDollarInMessgeFormatter() {
+        String msg = "${SYNC_NEW201}";
+        Map<String, Object> respMsg = new HashMap<>();
+        respMsg.put("vnfid", msg);
+        String formattedMsg = MessageFormatter.format(msg, respMsg);
+        Assert.assertEquals(msg, formattedMsg);
+    }
+}
diff --git a/appc-common/src/test/java/org/onap/appc/util/TestJsonUtil.java b/appc-common/src/test/java/org/onap/appc/util/TestJsonUtil.java
deleted file mode 100644
index 5963c67..0000000
--- a/appc-common/src/test/java/org/onap/appc/util/TestJsonUtil.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : APPC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Copyright (C) 2017 Amdocs
- * =============================================================================
- * 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.
- * 
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.appc.util;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.onap.appc.util.JsonUtil;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.junit.Assert.*;
-
-
-
-public class TestJsonUtil {
-
-    @Test
-    public void testConvertJsonStringToFlatMap() {
-        try {
-            String jsonString = "{\"A\":\"A-value\",\"B\":{\"C\":\"B.C-value\",\"D\":\"B.D-value\"}}";
-            Map<String, String> flatMap = JsonUtil.convertJsonStringToFlatMap(jsonString);
-            assertNotNull(flatMap);
-            Map<String, String> expectedMap = new HashMap<>();
-            expectedMap.put("A","A-value");
-            expectedMap.put("B.C","B.C-value");
-            expectedMap.put("B.D","B.D-value");
-            assertEquals(expectedMap,flatMap);
-        } catch (IOException e) {
-            e.printStackTrace();
-            Assert.fail(e.toString());
-        }
-    }
-
-    @Test
-    public void testConvertJsonStringToFlatMapWithInnerJson() {
-        try {
-            String jsonString = "{\"A\":\"A-value\",\"B\":\"{\\\"C\\\":\\\"C-value\\\",\\\"D\\\":\\\"D-value\\\"}\"}";
-            Map<String, String> flatMap = JsonUtil.convertJsonStringToFlatMap(jsonString);
-            assertNotNull(flatMap);
-            Map<String, String> expectedMap = new HashMap<>();
-            expectedMap.put("A","A-value");
-            expectedMap.put("B","{\"C\":\"C-value\",\"D\":\"D-value\"}");
-            assertEquals(expectedMap,flatMap);
-        } catch (IOException e) {
-            e.printStackTrace();
-            Assert.fail(e.toString());
-        }
-    }
-
-    @Test
-    public void testEscapeDollarInMessgeFormatter(){
-        String msg="${SYNC_NEW201}";
-        Map<String,Object> respMsg=new HashMap<String,Object>();
-        respMsg.put("vnfid",msg);
-        String formatedMsg=MessageFormatter.format(msg,respMsg);
-        Assert.assertEquals(msg,formatedMsg);
-    }
-}
diff --git a/appc-common/src/test/resources/invalid.json b/appc-common/src/test/resources/invalid.json
new file mode 100644
index 0000000..cd152e0
--- /dev/null
+++ b/appc-common/src/test/resources/invalid.json
@@ -0,0 +1,3 @@
+{
+  name: value
+}
\ No newline at end of file
diff --git a/appc-common/src/test/resources/valid.json b/appc-common/src/test/resources/valid.json
new file mode 100644
index 0000000..6ce80f3
--- /dev/null
+++ b/appc-common/src/test/resources/valid.json
@@ -0,0 +1,4 @@
+{
+  "name": "dummy name",
+  "value": 99
+}
\ No newline at end of file
