我试图执行一个对象的深层副本,然后在其中修改新对象而不改变oringial。为了测试我使用JUnit来确保功能性正常工作的功能。深度复制,JUnit测试Java
目前的测试基本上是复制游戏“质量效应3”和改变当前的配音演员。
游戏类
@Override
protected Object clone(){
Game obj = new Game(getTitle(), getLeadVoiceActor(), getRating());
return obj;
}
JUnit测试
@Before
public void setUp() {
p1 = new Person("Mark", "Meer");
g1 = new Game("Mass Effect 3", p1, 5);
}
@Test
public void testClone() throws CloneNotSupportedException {
//This works
Game g2 = (Game)g1.clone();
assertEquals(g2, g1);
assertNotSame(g2, g1);
//This doesn't even though the lead voice actor is now different
p1 = g1.getLeadVoiceActor();
p1.setFirstName("Jennifer");
p1.setLastName("Hale");
assertFalse(g2.equals(g1));
assertEquals("Jennifer Hale", g1.getLeadVoiceActor().toString());
assertEquals("Mark Meer", g2.getLeadVoiceActor().toString());
}
试验是用junit.framework.assertionfailederror失败。
这是什么问题? – MrSmith42
您的克隆不是深度复制,而只是浅拷贝。做'super.clone()'会产生同样的效果。 –
@ madth3我纠正了这些错别字。 JB Nizet我当时正在阅读一本书,指出我所做的确实是一个深层复制,你能否证实它是错误的? – Melky