我想测试一下 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.
我的方法需要更多的测试代码,但它给了你一个机会来写一个不需要嘲讽的测试。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());
}
注:本测试是根据两个假设编写的。 本测试是在两个假设下进行的。
Employee
类有一个方法 getTeacher()
. 因为你需要以某种方式断言 Teacher
正确读出 ObjectInputStream
. 如果你有其他方法可以做到这一点--根据你的需要修改我的例子。Employee.readObject()
方法的可见性是公开的。这样做只是为了简化我的例子。在你的问题中 readObject()
具有私有的可见性。你可以根据你的需要修改我的例子,或者给我更多的上下文,我可以相应地修改我的例子。P.S. 查看完整的代码 此处.