 
 	[Test]
 	public function testCopyWithClassLevelMetadata():void {
-		const copy:ClassLevelCopyable = Copier.copy(classLevelCopyable);
+		const copy1:ClassLevelCopyable = Copier.copy(classLevelCopyable);
+		assertNotNull(copy1);
+		assertNotNull(copy1.property1);
+		assertEquals(copy1.property1, classLevelCopyable.property1);
+		assertNotNull(copy1.property2);
+		assertEquals(copy1.property2, classLevelCopyable.property2);
+		assertNotNull(copy1.property3);
+		assertEquals(copy1.property3, classLevelCopyable.property3);
+		assertNotNull(copy1.writableField);
+		assertEquals(copy1.writableField, classLevelCopyable.writableField);
 
-		assertNotNull(copy);
-		assertNotNull(copy.property1);
-		assertEquals(copy.property1, classLevelCopyable.property1);
-		assertNotNull(copy.property2);
-		assertEquals(copy.property2, classLevelCopyable.property2);
-		assertNotNull(copy.property3);
-		assertEquals(copy.property3, classLevelCopyable.property3);
-		assertNotNull(copy.writableField);
-		assertEquals(copy.writableField, classLevelCopyable.writableField);
+		const copy2:ClassLevelCopyableCloneable = Copier.copy(classLevelCopyableCloneable);
+		assertNotNull(copy2);
+		assertNotNull(copy2.property1);
+		assertEquals(copy2.property1, classLevelCopyable.property1);
+		assertNotNull(copy2.property2);
+		assertEquals(copy2.property2, classLevelCopyable.property2);
+		assertNotNull(copy2.property3);
+		assertEquals(copy2.property3, classLevelCopyable.property3);
+		assertNotNull(copy2.writableField);
+		assertEquals(copy2.writableField, classLevelCopyable.writableField);
 	}
 
 	[Test]
 	public function testCopyWithPropertyLevelMetadata():void {
-		const copy:PropertyLevelCopyable = Copier.copy(propertyLevelCopyable);
+		const copy1:PropertyLevelCopyable = Copier.copy(propertyLevelCopyable);
+		assertNotNull(copy1);
+		assertNull(copy1.property1);
+		assertNotNull(copy1.property2);
+		assertEquals(copy1.property2, classLevelCopyable.property2);
+		assertNotNull(copy1.property3);
+		assertEquals(copy1.property3, classLevelCopyable.property3);
+		assertNotNull(copy1.writableField);
+		assertEquals(copy1.writableField, classLevelCopyable.writableField);
 
-		assertNotNull(copy);
-		assertNull(copy.property1);
-		assertNotNull(copy.property2);
-		assertEquals(copy.property2, classLevelCopyable.property2);
-		assertNotNull(copy.property3);
-		assertEquals(copy.property3, classLevelCopyable.property3);
-		assertNotNull(copy.writableField);
-		assertEquals(copy.writableField, classLevelCopyable.writableField);
+		const copy2:PropertyLevelCopyableCloneable = Copier.copy(propertyLevelCopyableCloneable);
+		assertNotNull(copy2);
+		assertNull(copy2.property1);
+		assertNotNull(copy2.property2);
+		assertEquals(copy2.property2, classLevelCopyable.property2);
+		assertNotNull(copy2.property3);
+		assertEquals(copy2.property3, classLevelCopyable.property3);
+		assertNotNull(copy2.writableField);
+		assertEquals(copy2.writableField, classLevelCopyable.writableField);
 	}
 }
 }

		assertNotNull(copyableFields[3]);

		copyableFields = Copier.getCopyableFieldsForType(propertyLevelCopyableType);

		assertNotNull(copyableFields);
		assertEquals(3, copyableFields.length);
		assertNotNull(copyableFields[0]);

	private var classLevelCopyable:ClassLevelCopyable;
	private var classLevelCopyableType:Type;

	private var classLevelCopyableCloneable:ClassLevelCopyableCloneable;
	private var classLevelCopyableCloneableType:Type;

	private var propertyLevelCopyable:PropertyLevelCopyable;
	private var propertyLevelCopyableType:Type;

	private var propertyLevelCopyableCloneable:PropertyLevelCopyableCloneable;
	private var propertyLevelCopyableCloneableType:Type;

	[Before]
	public function before():void {
