Исключение EOF для теста ObjectInputStream - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь проверить 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.

1 Ответ

2 голосов
/ 27 апреля 2020

Мой метод требует немного больше тестового кода, но он дает вам возможность написать тест без насмешек 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() Метод видимости - publi c. Это сделано исключительно для упрощения моего примера. В вашем вопросе readObject() имеет приватную видимость. Вы можете либо изменить мой пример в соответствии с вашими потребностями, либо дать мне больше контекста, чтобы я мог соответствующим образом изменить свой пример.

PS См. Полный код здесь .

...