运行 boolean 类型序列化的 Junit 测试后,我的序列化方法总是失败,并且 true
值如下
public static void serializeBoolean(boolean objectToSerialize, OutputStream outputStream) {
byte[] bytesArr = new byte[1];
ByteBuffer.wrap(bytesArr).put((byte) (objectToSerialize ? 1 : 0));
try {
outputStream.write(bytesArr);
} catch (IOException e) {
e.printStackTrace();
}
}
我的反序列化方法如下
public static boolean deserializeBoolean(InputStream inputStream) {
byte[] databytesArr = new byte[1];
if (ByteBuffer.wrap(databytesArr).get() == 1) {
return true;
}
else {
return false;
}
}
最后我写了一个单元测试如下
public class BooleanSerializerTest {
private InputStream iStream;
private ByteArrayOutputStream oStream;
@Before
public void init() {
oStream = new ByteArrayOutputStream();
}
boolean serialzeAndDeserializeObject(boolean booleanValue) {
OutputStreamUtil.serializeBoolean(booleanValue, oStream);
iStream = new ByteArrayInputStream(oStream.toByteArray());
return InputStreamUtil.deserializeBoolean(iStream);
}
@Test
public void equalToTrue() {
boolean booleanValue = true;
boolean deserializedBooleanValue =
serialzeAndDeserializeObject(booleanValue);
assertThat(deserializedBooleanValue).isEqualTo(booleanValue);
}
@Test
public void equalToFalse() {
boolean booleanValue = false;
boolean deserializedBooleanValue =
serialzeAndDeserializeObject(booleanValue);
assertThat(deserializedBooleanValue).isEqualTo(booleanValue);
}
}
equalToFalse()
测试成功,但 equalToTrue()
始终失败
出了什么问题?以及如何修复它?
最佳答案
您应该在方法deserializeBoolean
中添加inputStream.read(databytesArr);
,如下所示:
public static boolean deserializeBoolean(InputStream inputStream) {
byte[] databytesArr = new byte[1];
try {
inputStream.read(databytesArr);
} catch (IOException e) {
e.printStackTrace();
}
if (ByteBuffer.wrap(databytesArr).get() == 1) {
return true;
} else {
return false;
}
}
关于java - boolean 类型序列化和反序列化单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51626253/