java - boolean 类型序列化和反序列化单元测试失败

标签 java serialization junit boolean

运行 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/

相关文章:

java - 为什么这个 Expect Exception Junit 测试不起作用?

java - 在 Spring Boot 中使用 Jetty 接受代理协议(protocol) V2 流量

java - 运行 Appium 命令时出错 : string is not a function

java - 从 Intellij IDEA 中运行 Tomcat 时有何不同?

Java并行序列化和压缩

java - 单元测试 : assert not work?

java - 使用 REST API 将 SAN 或本地磁盘添加到 Softlayer 中已配置的服务器?

java - 我可以以非模态方式使用 Java JOptionPane 吗?

json - 使用Jackson ACCEPT_SINGLE_VALUE_AS_ARRAY从字符串反序列化ArrayList

java - 使用 JUnit 测试树实现