首页 > 解决方案 > 布尔类型序列化和反序列化单元测试失败

问题描述

在为布尔类型序列化运行 Junit 测试后,它总是失败,true值 my serialize 方法如下

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()总是失败

什么问题?以及如何解决?

标签: javaserializationjunitboolean

解决方案


您应该添加inputStream.read(databytesArr);如下方法deserializeBoolean

    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;
        }
    }

推荐阅读