【问题标题】:How to create a inputStream with test data如何使用测试数据创建 inputStream
【发布时间】:2020-06-03 13:44:54
【问题描述】:

我正在尝试编写单元测试。在我正在测试的类中,我通过构造函数传递了一个 java.net.Socket 对象。这个变量称为connection。在那个类中,有一行:

ObjectInputStream in = new ObjectInputStream(connection.getInputStream());

现在在我的单元测试中,我在创建该类的实例时传递了一个模拟的 Socket 对象。 在我的单元测试中,我正在编写以下内容:

when(socket.getInputStream()).thenReturn(getInputStream());

   private InputStream getInputStream() throws IOException
   {
       InputStream d = new ReaderInputStream(new StringReader("test data"));
      ObjectInputStream o = new ObjectInputStream(d);
      return d;
   }

但是在运行时,我收到以下错误:

java.io.StreamCorruptedException: invalid stream header: 64666466

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:278)

不知道如何克服这个问题。错误源于ObjectInputStream o = new ObjectInputStream(d);

【问题讨论】:

    标签: java unit-testing junit mocking


    【解决方案1】:

    ObjectInputStream 通过检查输入流来验证标头。在您的情况下,您是 ObjectInputStream 支持的流数据。

    因此,您必须使用 ObjectInputStream 可以理解的流,​​即从 ObjectOutputStream 生成的输入数据。

    这是一个示例;

    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeUTF("Hello World");
    
        InputStream d = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        ObjectInputStream o = new ObjectInputStream(d);
    

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多