diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/pom.xml b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/pom.xml
index 07dcf6c..f4ec39e 100644
--- a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/pom.xml
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/pom.xml
@@ -13,6 +13,9 @@
 
     <artifactId>openecomp-conflict-api</artifactId>
 
+    <properties>
+        <java-hamcrest.version>2.0.0.0</java-hamcrest.version>
+    </properties>
 
     <dependencies>
         <dependency>
@@ -30,8 +33,18 @@
             <artifactId>openecomp-sdc-versioning-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.bean-matchers</groupId>
+            <artifactId>bean-matchers</artifactId>
+            <version>${bean-matchers.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
-
-
 </project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/Conflict.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/Conflict.java
index a7b1ff3..80186f8 100644
--- a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/Conflict.java
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/Conflict.java
@@ -20,12 +20,16 @@
 
 package org.openecomp.conflicts.types;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.openecomp.sdc.datatypes.model.ElementType;
 
 public class Conflict<T> extends ConflictInfo {
   private T yours;
   private T theirs;
 
+  @VisibleForTesting
+  Conflict() {}
+
   public Conflict(String id, ElementType type, String name) {
     super(id, type, name);
   }
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/ConflictInfo.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/ConflictInfo.java
index 3f67885..af4111c 100644
--- a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/ConflictInfo.java
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/main/java/org/openecomp/conflicts/types/ConflictInfo.java
@@ -20,6 +20,7 @@
 
 package org.openecomp.conflicts.types;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.openecomp.sdc.datatypes.model.ElementType;
 
 public class ConflictInfo {
@@ -27,6 +28,10 @@
   private ElementType type;
   private String name;
 
+  @VisibleForTesting
+  ConflictInfo() {
+  }
+
   public ConflictInfo(String id, ElementType type, String name) {
     this.id = id;
     this.type = type;
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictInfoTest.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictInfoTest.java
new file mode 100644
index 0000000..bfd57d5
--- /dev/null
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictInfoTest.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.conflicts.types;
+
+import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class ConflictInfoTest {
+
+    @Test
+    public void shouldHaveValidGettersAndSetters() {
+        assertThat(ConflictInfoTest.class, hasValidGettersAndSetters());
+    }
+
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictResolutionTest.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictResolutionTest.java
new file mode 100644
index 0000000..3af5233
--- /dev/null
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictResolutionTest.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.conflicts.types;
+
+import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class ConflictResolutionTest {
+
+    @Test
+    public void shouldHaveValidGettersAndSetters() {
+        assertThat(ConflictResolution.class, hasValidGettersAndSetters());
+    }
+
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictTest.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictTest.java
new file mode 100644
index 0000000..580458c
--- /dev/null
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ConflictTest.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.conflicts.types;
+
+import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class ConflictTest {
+
+    @Test
+    public void shouldHaveValidGettersAndSetters() {
+        assertThat(Conflict.class, hasValidGettersAndSetters());
+    }
+
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ItemVersionConflictTest.java b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ItemVersionConflictTest.java
new file mode 100644
index 0000000..10f9148
--- /dev/null
+++ b/openecomp-be/lib/openecomp-conflict-lib/openecomp-conflict-api/src/test/java/org/openecomp/conflicts/types/ItemVersionConflictTest.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.conflicts.types;
+
+import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class ItemVersionConflictTest {
+
+    @Test
+    public void shouldHaveValidGettersAndSetters() {
+        assertThat(ItemVersionConflict.class, hasValidGettersAndSetters());
+    }
+
+    @Test
+    public void shouldAddItemToList() {
+        ItemVersionConflict itemVersionConflict = new ItemVersionConflict();
+        ConflictInfo conflictInfo = new ConflictInfo();
+        itemVersionConflict.addElementConflictInfo(conflictInfo);
+        assertEquals(itemVersionConflict.getElementConflicts().size(),1 );
+        assertTrue(itemVersionConflict.getElementConflicts().contains(conflictInfo));
+    }
+}
\ No newline at end of file
