Unit testing ObjectInputStream测试的EOF异常

Unit testing ObjectInputStream测试的EOF异常,unit-testing,junit,mockito,inputstream,datainputstream,Unit Testing,Junit,Mockito,Inputstream,Datainputstream,我正在尝试测试从ObjectInputStream读取对象的readObject方法 @Test public void testReadObject() throws Exception { ObjectInputStream in = new ObjectInputStream(System.in); ... } 我在ObjectInputStream in=new ObjectInputStream(System.in)中获得ObjectInputStream的java.io.

我正在尝试测试从
ObjectInputStream
读取对象的
readObject
方法

@Test
public void testReadObject() throws Exception {
    ObjectInputStream in = new ObjectInputStream(System.in);
...
} 
我在
ObjectInputStream in=new ObjectInputStream(System.in)中获得ObjectInputStream的
java.io.EOFException

我是模拟
ObjectInputStream
还是一种不好的做法? 如何编写一个测试用例来涵盖整个
readObject
场景

我的员工类别:

public class Employee {

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

请注意,我使用的是JUnit和Mockito。

我的方法需要多一点测试代码,但它让您有机会编写测试,而无需模拟
ObjectInputStream

@测试
void testReadObject()引发异常{
字符串teacherObject=“teacherObject”;
final ByteArrayOutputStream outputStream=新建ByteArrayOutputStream();
新建ObjectOutputStream(outputStream).writeObject(teacherObject);
最终员工=新员工();
employee.readObject(
新ObjectInputStream(
新ByteArrayInputStream(
outputStream.toByteArray()
)
)
);
assertEquals(teacherObject,employee.getTeacher());
}
注意:本测试是在两个假设下编写的:

  • Employee
    类有一个方法
    getTeacher()
    。因为您需要以某种方式断言从
    ObjectInputStream
    正确读取了
    Teacher
    。如果你有其他方法可以做到这一点-修改我的例子根据你的需要
  • Employee.readObject()
    方法可见性是公共的。这样做只是为了简化我的示例。在您的问题中,
    readObject()
    具有私有可见性。您可以根据需要修改我的示例,或者给我更多的上下文,我可以相应地修改我的示例
  • p.S.请参阅完整代码