gpt4 book ai didi

java - junit 测试中的 SerializationException

转载 作者:行者123 更新时间:2023-11-30 02:00:41 39 4
gpt4 key购买 nike

我有以下类(class):

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

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

  <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>

请问如何解决?

最佳答案

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

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

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

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

public class TestClass {
@Test
public void test() {
Person v = new TestPerson();
Person person2 = SerializationUtils.clone(v);
}

static class TestPerson extends Person {
{
setAge("SD");
}
}
}

或者,最好不要使用 double-brace initialization ,特别是如果您不了解它导致的序列化问题(以及其他问题):

Person v = new Person();
v.setAge("SD");
Person person2 = SerializationUtils.clone(v);

关于java - junit 测试中的 SerializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942939/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com