我在代码中创建了一个对象的克隆。
Class<?> oc = o.getClass();
Object preStateInstance = oc.newInstance();
现在我必须输出一个Java文件,我希望创建的文件具有该克隆实例的赋值。类似的东西:
Object varX = preStateInstance.value;
这可能吗?怎么样?
我要做的是创建测试用例。我想将测试对象的实例保存为预状态值,以便能够比较对象的前后状态。我已经在我的代码中完成了,现在我需要将它输出到JUnit文件。在处理JUnit文件写入的类中,我只能访问preStateInstance
。
答案 0 :(得分:1)
要创建克隆,您必须实现Cloneable Interface和克隆方法,该方法创建新对象并复制必要的属性。
但是对于你的单元测试,我建议使用某种序列化,看一下XStream(http://x-stream.github.io/)它将一个对象转换成XML,反之亦然,这样你甚至可以编辑XML - 非常适合测试用例恕我直言。
答案 1 :(得分:0)
(公共)类成员也可以使用反射访问:
Field field = oc.getField("value");
Object varX = field.get(preStateInstance);
但请注意以下事项:
Class.newInstance()
不会创建o
的克隆。它会创建o
。Class.newInstance()
调用默认构造函数。确保它可用答案 2 :(得分:0)
如果需要克隆Java对象,可以使用内置的clone()
方法(您的类必须实现Cloneable
)。或者使用各种Bean属性库中的一个(例如commons / beanutils)将状态从一个Object转移到另一个Object。
答案 3 :(得分:0)
@Daniel,很棒的答案。
如果您尝试保存对象内容以便在运行测试时能够将其读回来,那么您可能会考虑序列化
http://www.exampledepot.com/egs/java.io/SerializeObj.html
http://www.exampledepot.com/egs/java.io/DeserializeObj.html
Daniel的方法甚至更好,如果你想手动更改数据,序列化,以二进制存储。