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);