junit 测试中的 SerializationException

我有以下课程:


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.NotSerializableException: com.mypackage.TestClass


我正在使用 intellij,该项目是 maven 项目,测试是 JUnit4。依赖版本:


  <dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-lang3</artifactId>

    <version>3.3.2</version>

  </dependency>

请指教我该如何解决?


凤凰求蛊
浏览 147回答 1
1回答

千万里不及你

您在测试中声明了一个匿名类。非静态范围内的匿名类(在实例方法、构造函数、实例初始值设定项或实例成员初始值设定项中)隐式地包含对封闭类(在本例中为TestClass)的引用。由于该类不可序列化,因此无法序列化。改为将您的匿名子类声明为静态类。public class TestClass {&nbsp; &nbsp; @Test&nbsp; &nbsp; public void test() {&nbsp; &nbsp; &nbsp; &nbsp; Person v = new TestPerson();&nbsp; &nbsp; &nbsp; &nbsp; Person person2 = SerializationUtils.clone(v);&nbsp; &nbsp; }&nbsp; static class TestPerson extends Person {&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; setAge("SD");&nbsp; &nbsp; }&nbsp; }}或者,最好不要使用双括号初始化,特别是如果您不了解它在序列化(以及其他问题)方面引起的问题:Person v = new Person();v.setAge("SD");Person person2 = SerializationUtils.clone(v);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java