ObjectInputStream测试的EOF异常。

问题描述 投票:1回答:1

我想测试一下 readObject 读取对象的方法 ObjectInputStream

@Test
public void testReadObject() throws Exception {
    ObjectInputStream in = new ObjectInputStream(System.in);
...
} 

我越来越 java.io.EOFException 对于ObjectInputStream在 ObjectInputStream in = new ObjectInputStream(System.in);.

我是在嘲笑你吗?ObjectInputStream 还是说这是一种不好的做法?我如何编写测试用例以涵盖 readObject 场景作为一个整体?

我的雇员类。

public class Employee {

private Object Teacher;
...
private void readObject(java.io.ObjectInputStream in) throws Exception {
    Teacher = in.readObject();
 }
...
}

注意,我使用的是JUnit和Mockito.

unit-testing junit mockito inputstream datainputstream
1个回答
2
投票

我的方法需要更多的测试代码,但它给了你一个机会来写一个不需要嘲讽的测试。ObjectInputStream:

@Test
void testReadObject() throws Exception {
    String teacherObject = "TeacherObject";
    final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    new ObjectOutputStream(outputStream).writeObject(teacherObject);
    final Employee employee = new Employee();

    employee.readObject(
        new ObjectInputStream(
            new ByteArrayInputStream(
                outputStream.toByteArray()
            )
        )
    );

    assertEquals(teacherObject, employee.getTeacher());
}

注:本测试是根据两个假设编写的。 本测试是在两个假设下进行的。

  1. Employee 类有一个方法 getTeacher(). 因为你需要以某种方式断言 Teacher 正确读出 ObjectInputStream. 如果你有其他方法可以做到这一点--根据你的需要修改我的例子。
  2. Employee.readObject() 方法的可见性是公开的。这样做只是为了简化我的例子。在你的问题中 readObject() 具有私有的可见性。你可以根据你的需要修改我的例子,或者给我更多的上下文,我可以相应地修改我的例子。

P.S. 查看完整的代码 此处.

© www.soinside.com 2019 - 2024. All rights reserved.