diff --git a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-api/pom.xml b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-api/pom.xml
index 8cff61b..7e40bc7 100644
--- a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-api/pom.xml
+++ b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-api/pom.xml
@@ -65,7 +65,7 @@
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
             <scope>test</scope>
-            <version>6.8.5</version>
+            <version>${testng.version}</version>
             <exclusions>
                 <exclusion>
                     <artifactId>snakeyaml</artifactId>
diff --git a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/pom.xml b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/pom.xml
index efd493f..48a16a3 100644
--- a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/pom.xml
+++ b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/pom.xml
@@ -44,7 +44,7 @@
         <dependency>
             <groupId>org.testng</groupId>
             <artifactId>testng</artifactId>
-            <version>6.8.8</version>
+            <scope>compile</scope>
         </dependency>
     <dependency>
         <groupId>junit</groupId>
diff --git a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/ArtifactGenerationServiceTest.java b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/ArtifactGenerationServiceTest.java
index b11c33e..c8a915d 100644
--- a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/ArtifactGenerationServiceTest.java
+++ b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/ArtifactGenerationServiceTest.java
@@ -134,7 +134,7 @@
 
                     if (baseResourceWidgetModelElements.getModelElement().size() !=
                         groupIdTypeStore.size()) {
-                        org.testng.Assert.fail("Missing VFModule in VF model.xml");
+                        Assert.fail("Missing VFModule in VF model.xml");
                     }
 
                     for (String key : groupIdTypeStore.keySet()) {
@@ -285,11 +285,11 @@
                 ModelElements containedModelElements = modelVersion.getModelElements().getModelElement().
                     get(0).getModelElements();
 
-                org.testng.Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
+                Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
                      .getRelationship().get(0).getRelationshipData().get(0).getRelationshipValue(),
                         providingServiceDetails.get("providing_service_uuid"));
 
-                org.testng.Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
+                Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
                     .getRelationship().get(0).getRelationshipData().get(1).getRelationshipValue(),
                         providingServiceDetails.get("providing_service_invariant_uuid"));
 
@@ -363,7 +363,7 @@
 
         ToscaTemplate serviceTosca = getServiceTosca(toscas);
         if (serviceTosca == null) {
-            org.testng.Assert.fail("Service Tosca not found");
+            Assert.fail("Service Tosca not found");
         }
         serviceTosca.getMetadata().put("version", SampleJUnitTest.additionalParams.get(
             AdditionalParams
@@ -404,11 +404,11 @@
                     }
 
                     //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
-                    org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
+                    Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
                         .getRelationship().get(0)
                         .getRelationshipData().get(0).getRelationshipValue(),entry.getKey());
 
-                    org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
+                    Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
                         .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
                         .get(entry.getKey()+ INV_UID));
                 } else if(entry.getValue().contains("org.openecomp.resource.vl")){
@@ -418,11 +418,11 @@
                     validateMatchedModelElementsInService(matchedResourceElements,
                         Widget.getWidget(Widget.Type.L3_NET).getName());
                     //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
-                    org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
+                    Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
                         .getRelationship().get(0)
                         .getRelationshipData().get(0).getRelationshipValue(),entry.getKey());
 
-                    org.testng.Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
+                    Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
                         .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
                         .get(entry.getKey() + INV_UID));
                 }
@@ -432,12 +432,12 @@
 
     private static void validateWidgetIds(List<ModelElement> matchedServiceBaseWidgetElements,
                                           String widgetName, String widgetInvUuId) {
-        org.testng.Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
+        Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
             .getRelationshipData().get(0).getRelationshipValue(), properties.getProperty(
             ArtifactType.AAI.name()
             + ".model-version-id."+ widgetName));
 
-        org.testng.Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
+        Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
             .getRelationshipData().get(1).getRelationshipValue(), widgetInvUuId);
     }
 
diff --git a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/SampleJUnitTest.java b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/SampleJUnitTest.java
index 9c4def4..6b59e2e 100644
--- a/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/SampleJUnitTest.java
+++ b/common/onap-sdc-artifact-generator-lib/onap-sdc-artifact-generator-test/src/main/java/org/onap/sdc/generator/SampleJUnitTest.java
@@ -31,7 +31,6 @@
 import org.onap.sdc.generator.aai.model.Widget;
 import org.onap.sdc.generator.aai.tosca.ToscaTemplate;
 import org.onap.sdc.generator.aai.xml.Model;
-import org.onap.sdc.generator.data.*;
 
 import junit.framework.TestCase;
 import org.junit.Assert;
