Тест контроллера класса Java с помощью Mock - PullRequest
0 голосов
/ 25 марта 2019

У меня вопрос по модульному тесту, если быть точным с Mockito.Я создал архитектурный шаблон MVC, и я должен проверить свой контроллер, который работает с консолью ввода формы.В моем тесте я написал имитацию ввода с консоли, но учитель сказал, что я не должен использовать некоторые классы там.

У меня есть Student.class, который является моей моделью.Этот класс имеет такие методы, как -> setId, setName, setSubjects, getId, getName и getSubjects, а также метод toString ().

Это мой вид:

public class View {
    private Student student;
    private DiplomaStudent diplomaStudent;

    public View() {
        this.student = new Student();
        this.diplomaStudent = new DiplomaStudent();
    }

    public void inoutStudent() {
        System.out.println("Enter id: ");
        Scanner input = new Scanner(System.in);
        Integer id = input.nextInt();
        student.setId(id);

        System.out.println("Enter name: ");
        Scanner inputName = new Scanner(System.in);
        String name = inputName.nextLine();
        student.setStudentName(name);

        System.out.println("Enter course");
        Scanner inputCourse = new Scanner(System.in);
        Integer course = inputCourse.nextInt();
        student.setCourse(course);

        System.out.println(student.getId() + " " + student.getStudentName() + " " + student.getCourse());
    }

    public String inputing() {
        System.out.println("Enter name: ");
        Scanner inputName = new Scanner(System.in);
        String name = inputName.nextLine();

        return name;
    }
}

Это мой контроллер:

public class Controller {
    private Student student;
    private DiplomaStudent diplomaStudent;
    private View view;

    public Controller() {
        this.student = new Student();
        this.diplomaStudent = new DiplomaStudent();
        this.view = new View();
    }

    public void startStud() {
        view.inoutStudent();
    }

    public String inpt() {
        return view.inputing();
    }
}

В моем тесте я делал имитацию, как здесь, с View.class

@Test
@DisplayName("test immitation from console input")
public void testView(){
    View view = new View();
    String inputName = "Jhon";
    InputStream in = new ByteArrayInputStream(inputName.getBytes());
    System.setIn(in);
    assertEquals("Jhon", view.inputing());
}

Но я должен написать то же самое для контроллера

@Test
public void testController() {
    Controller controller = mock(Controller.class);

    /*String inputName = "Jhon";
    InputStream in = new ByteArrayInputStream(inputName.getBytes());
    System.setIn(in);*/
    //what i should write here
    assertEquals("Jhon", controller.inpt());
}

Итак, что я должен написать для моего теста контроллера, пожалуйста, помогите мне.

...