我正在尝试测试从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
:的情况下编写测试的机会
@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()
具有私人可见性。你可以根据需要修改我的例子,也可以给我更多的上下文,我可以相应地修改我的示例
完整源代码:
- Employee.java
package dev.iakunin.stackoverflow.question;
public class Employee {
private Object teacher;
public void readObject(java.io.ObjectInputStream in) throws Exception {
teacher = in.readObject();
}
public Object getTeacher() {
return teacher;
}
}
- EmployeeTest.java
package dev.iakunin.stackoverflow.question;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class EmployeeTest {
@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());
}
}