gpt4 book ai didi

java - 用户定义对象序列化的 Junit 测试失败

转载 作者:行者123 更新时间:2023-11-29 07:26:30 26 4
gpt4 key购买 nike

在为用户定义的对象序列化运行一个 Junit 测试后,失败并给了我结果

预期:com.me.Position@7a92922

实际:com.me.Position@25618e91

我定义了下面的类

public class Position {

private double x;
private double y;

/**
* default constructor
*/
public Position() {
}

/**
* paramterized constructor
*
* @param x
* x-coordinate
* @param y
* y-coordinate
*/
public Position(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}

public double getY() {
return y;
}

public void setY(double y) {
this.y = y;
}
}

然后我定义了另一个类来序列化和反序列化一个 Position 对象,它是前一个类的实例,如下所示

public class PositionSerializer {

static void serialize(Position position, OutputStream outputStream) {
OutputStreamUtil.serializeDouble(position.getX(), outputStream);
OutputStreamUtil.serializeDouble(position.getY(), outputStream);
}

static Position deserialize(InputStream inputStream) {
double x = InputStreamUtil.deserializeDouble(inputStream);
double y = InputStreamUtil.deserializeDouble(inputStream);
Position positionObject = new Position();
positionObject.setX(x);
positionObject.setY(y);
return positionObject;
}
}

最后我写了一个单元测试如下

public class PositionSerializerTest {

private InputStream iStream;
private ByteArrayOutputStream oStream;

@Before
public void init() {
oStream = new ByteArrayOutputStream();
}

Position serialzeAndDeserializeObject(Position positionObject) {
PositionSerializer.serialize(positionObject, oStream);
iStream = new ByteArrayInputStream(oStream.toByteArray());
return PositionSerializer.deserialize(iStream);
}

@Test
public void equals_equal() {
Position positionObject = new Position(5.5, 10.5);
Position deserializedPosition = serialzeAndDeserializeObject(positionObject);
assertThat(deserializedPosition).isEqualTo(positionObject);
}
}

怎么了?以及如何解决?

最佳答案

您正在检查不相等的引用相等性,因为您的反序列化方法在每次调用时都会返回新实例,请使用下面的值进行比较:

assertThat(deserializedPosition.getX()).isEqualTo(positionObject.getX())    
assertThat(deserializedPosition.getY()).isEqualTo(positionObject.getY())

关于java - 用户定义对象序列化的 Junit 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618174/

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