为了账号安全,请及时绑定邮箱和手机立即绑定

junit 测试中的 SerializationException

junit 测试中的 SerializationException

凤凰求蛊 2021-12-01 19:51:36
我有以下课程:import lombok.Data;import java.io.Serializable;@Datapublic 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>请指教我该如何解决?
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您在测试中声明了一个匿名类。


非静态范围内的匿名类(在实例方法、构造函数、实例初始值设定项或实例成员初始值设定项中)隐式地包含对封闭类(在本例中为TestClass)的引用。


由于该类不可序列化,因此无法序列化。


改为将您的匿名子类声明为静态类。


public class TestClass {

    @Test

    public void test() {

        Person v = new TestPerson();

        Person person2 = SerializationUtils.clone(v);

    }


  static class TestPerson extends Person {

    {

      setAge("SD");

    }

  }

}

或者,最好不要使用双括号初始化,特别是如果您不了解它在序列化(以及其他问题)方面引起的问题:


Person v = new Person();

v.setAge("SD");

Person person2 = SerializationUtils.clone(v);


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信