Я новичок в JUnit и пытаюсь настроить автоматическое выставление оценок для разрабатываемого мной курса.
Я хочу убедиться, что учащиеся используют следующие имена переменных:
firstName3, firstName2, firstName1
В том порядке, как только они включают его в довольно стандартную строку System.out.println(); в классе Main и методе main.
Как я могу проверить это в JUnit?
Обычно для проверки поведение используются модульные тесты. Почему важно, какие внутренние (?) Имена переменных используются? (Что действительно очень сложно проверить.)
JUnit проверяет поведение, а не качество или стиль кода. (Я бы даже сказал, что имена с конечным числом - плохой стиль.)
@ Иван да, именно так
@OliverCharlesworth Я пытаюсь организовать базовый урок по Scanner, и одна из вещей, которые я хочу, чтобы студенты делали, - это вводить имена по порядку, а затем перевернуть их в выходных данных. Базовый, я знаю, но фундаментальный шаг в переменных типа коллекции.
Понятно. Как я уже сказал, если важен сам код (а не просто поведение), JUnit может быть не лучшим инструментом для этого. Хотя я не уверен, что у меня есть какие-нибудь блестящие идеи об альтернативных инструментах, которые позволили бы достичь того, чего вы хотите: /
@Robert Вы хотите сказать, что JUnit не может делать такие вещи?
@mpcsf JUnit - это просто старый код Java, который вызывает ваш код и помогает вам проверять возвращаемые значения и / или возникшие исключения. Если вы не можете указать имена переменных при его вызове, JUnit тоже не сможет.
@AndyTurner понял. Спасибо




На него ответил @andy-turner в комментариях выше. То, что я ищу, не может выполнить JUnit.
JUnit is just plain old Java code that invokes your code, and helps you to check the returned values and/or exceptions thrown. If you can't tell the names of the variables when you invoke it, JUnit can't either. – Andy Turner
Если вы настаиваете на автоматизации подобных проверок, вы можете взглянуть на библиотеки, такие как JavaParser, которые предоставляют функциональные возможности для синтаксического анализа и проверки исходного кода Java.
Помимо других ответов: вы смотрите не на тот аспект.
Вы можете использовать тесты для проверки наблюдаемого поведения кода, который пишут студенты. Ваш тест управляет определенным вводом и ожидает определенного вывода.
Это должно быть вашим первым приоритетом.
Помимо этого, действительно (не так много) есть смысл проверять, имеет ли код студента определенную структуру. Даже когда вы используете синтаксический анализатор исходного кода Java, будет множество способов правильно решить задание, которое не имеет (точной) структуры, которую вы ожидаете. Может быть, одному из ваших учеников действительно надоело набирать name1, name2, name3, и он сам решает, что «есть массивы для таких вещей», и использует это в своем решении. Вы бы хотели его за это наказать ?!
Таким образом, вы должны решить эту часть проблемы, которой она принадлежит: на мета / социальном уровне.
Другими словами: найдите для студентов хороший способ сесть вместе и просмотреть свой код. Вы можете попросить волонтера и представить его работу в классе, а затем поговорить о плюсах и минусах. Или вы создаете небольшие группы, и более опытный человек работает репетитором.
Не каждую «техническую» проблему нужно решать техническими решениями!
Я согласен с вашим классным подходом к этой конкретной проблеме в целом.
Я согласен с вашим классным подходом к этой конкретной проблеме в целом. Однако знайте, что массивы / коллекции / списки еще не рассматривались в классе. Хотя я бы никогда не наказал студента за работу над чем-то «впереди» класса, они все еще работают над синтаксисом и примитивами - я включаю только строки, потому что это легко для студентов, которые только начинают использовать слова в качестве значений. Кроме того, студенты из отдаленных районов работают в своем собственном темпе. Я использую GitHub и другие инструменты для совместной работы, но я должен позволить студентам немедленно получать техническую обратную связь.
@mpcsf Но тогда вопрос в том, действительно ли файл + компилятор + файлы классов - это то, что вам нужно. Разве не было бы более полезным дать студентам веб-интерфейс, в котором им нужно только указать части методов? Нравится то, что должно быть в основном методе? Как уже было сказано: когда структура имеет значение для вас, просмотр поведения файла класса вам не очень поможет.
Вы хотите проверить, есть ли в этом коде строка
System.out.println(firstName3, firstName2, firstName1);?