С текущим решением вы не можете смоделировать сканер, потому что вы создаете новый экземпляр во время выполнения метода. Здесь могут быть два решения:
1.Сделать сканер в качестве поля класса:
public YourClass {
private Scanner scanner = new Scanner(System.in);
@Override
public HashMap<String, Integer> findAllGroupsWithLessOrEqualsStudentCount(String pathToDatabaseProperties) {
ConnectionFactory connectionFactory = new ConnectionFactory();
System.out.println("Please, enter minimum number of students in groups : ");
int numberOfStudents = scanner.nextInt();
System.out.println(main.drawGroupNamesAndNumberOfStudents(main.replaceGroupNumberToGroupName(main.countNumberOfStudentsInGroups(numberOfStudents, pathToDatabaseProperties), connectionFactory.connectToDatabase(pathToDatabaseProperties))));
return main.replaceGroupNumberToGroupName(main.countNumberOfStudentsInGroups(numberOfStudents, pathToDatabaseProperties), connectionFactory.connectToDatabase(pathToDatabaseProperties));
}
}
, а затем обычно издеваться над объектом сканера:
@Mock
private Scanner scanner;
...
MockitoAnnotations.initMocks(this);
when(scanner.nextInt()).thenReturn(number);
Выполните инициализацию метода Scanner:
publi c YourClass {
@Override
public HashMap<String, Integer> findAllGroupsWithLessOrEqualsStudentCount(String pathToDatabaseProperties) {
ConnectionFactory connectionFactory = new ConnectionFactory();
Scanner scanner = getScanner();
System.out.println("Please, enter minimum number of students in groups : ");
int numberOfStudents = scanner.nextInt();
System.out.println(main.drawGroupNamesAndNumberOfStudents(main.replaceGroupNumberToGroupName(main.countNumberOfStudentsInGroups(numberOfStudents, pathToDatabaseProperties), connectionFactory.connectToDatabase(pathToDatabaseProperties))));
return main.replaceGroupNumberToGroupName(main.countNumberOfStudentsInGroups(numberOfStudents, pathToDatabaseProperties), connectionFactory.connectToDatabase(pathToDatabaseProperties));
}
public Scanner getScanner() {
return new Scanner(System.in);
}
}
и затем используйте @Spy на вашем Класс и издеваться над этим методом:
@Spy
private YourClass yourClass;
@Mock
private Scanner scanner;
...
when(yourClass.getScanner()).thenReturn(scanner);
when(scanner.nextInt()).thenReturn(number);