Java junit测试上的序列化异常
我有以下课程:Java junit测试上的序列化异常,java,apache,serialization,junit,Java,Apache,Serialization,Junit,我有以下课程: import lombok.Data; import java.io.Serializable; @Data public class Person implements Serializable { private String age; } 主要应用 import org.apache.commons.lang3.SerializationUtils; public class MainApp { public static void main(St
import lombok.Data;
import java.io.Serializable;
@Data
public class Person implements Serializable {
private String age;
}
主要应用
import org.apache.commons.lang3.SerializationUtils;
public class MainApp {
public static void main(String[] args) {
Person v = new Person() {{
setAge("SD");
}};
Person person2 = SerializationUtils.clone(v);
}
}
测试班
import org.apache.commons.lang3.SerializationUtils;
import org.junit.Test;
public class TestClass {
@Test
public void test() {
Person v = new Person() {{
setAge("SD");
}};
Person person2 = SerializationUtils.clone(v);
}
}
在主应用程序中,序列化有效,而在单元测试中则无效。
它引发SerializationException,并显示以下详细信息:
org.apache.commons.lang3.SerializationException:java.io.NotSerializationException:com.mypackage.TestClass
我使用intellij,项目是maven项目,测试是JUnit4。依赖项版本:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
org.apache.commons
commons-lang3
3.3.2
请告知如何解决此问题?您在测试中声明了一个匿名类 非静态作用域中的匿名类(在实例方法、构造函数、实例初始值设定项或实例成员初始值设定项中)隐式地包含对封闭类的引用(在本例中,
TestClass
)
由于该类不可序列化,因此无法序列化
将匿名子类声明为静态类
public class TestClass {
@Test
public void test() {
Person v = new TestPerson();
Person person2 = SerializationUtils.clone(v);
}
static class TestPerson extends Person {
{
setAge("SD");
}
}
}
或者,最好不要使用,特别是如果您不了解它在序列化方面引起的问题(以及其他问题):
我在测试中声明的匿名类是什么?@DanielGrin“
newperson(){{…}}
”。你能为两种方法都添加一个示例吗?@DanielGrin“双向”?非常感谢它解决了我的问题,但仍然是一个问题。我在MainApp中使用相同的匿名类为什么它在那里工作?
Person v = new Person();
v.setAge("SD");
Person person2 = SerializationUtils.clone(v);