JUnit4: как проверить правильность имени переменной

Я новичок в JUnit и пытаюсь настроить автоматическое выставление оценок для разрабатываемого мной курса.

Я хочу убедиться, что учащиеся используют следующие имена переменных:

firstName3, firstName2, firstName1 

В том порядке, как только они включают его в довольно стандартную строку System.out.println(); в классе Main и методе main.

Как я могу проверить это в JUnit?

Вы хотите проверить, есть ли в этом коде строка System.out.println(firstName3, firstName2, firstName1);?

Ivan 17.10.2018 20:39

Обычно для проверки поведение используются модульные тесты. Почему важно, какие внутренние (?) Имена переменных используются? (Что действительно очень сложно проверить.)

Oliver Charlesworth 17.10.2018 20:40

JUnit проверяет поведение, а не качество или стиль кода. (Я бы даже сказал, что имена с конечным числом - плохой стиль.)

Robert 17.10.2018 20:40

@ Иван да, именно так

mpcsf 17.10.2018 20:41

@OliverCharlesworth Я пытаюсь организовать базовый урок по Scanner, и одна из вещей, которые я хочу, чтобы студенты делали, - это вводить имена по порядку, а затем перевернуть их в выходных данных. Базовый, я знаю, но фундаментальный шаг в переменных типа коллекции.

mpcsf 17.10.2018 20:43

Понятно. Как я уже сказал, если важен сам код (а не просто поведение), JUnit может быть не лучшим инструментом для этого. Хотя я не уверен, что у меня есть какие-нибудь блестящие идеи об альтернативных инструментах, которые позволили бы достичь того, чего вы хотите: /

Oliver Charlesworth 17.10.2018 20:45

@Robert Вы хотите сказать, что JUnit не может делать такие вещи?

mpcsf 17.10.2018 20:45

@mpcsf JUnit - это просто старый код Java, который вызывает ваш код и помогает вам проверять возвращаемые значения и / или возникшие исключения. Если вы не можете указать имена переменных при его вызове, JUnit тоже не сможет.

Andy Turner 17.10.2018 20:49

@AndyTurner понял. Спасибо

mpcsf 17.10.2018 20:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
157
2

Ответы 2

На него ответил @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.

Henrik Aasted Sørensen 18.10.2018 12:41

Помимо других ответов: вы смотрите не на тот аспект.

Вы можете использовать тесты для проверки наблюдаемого поведения кода, который пишут студенты. Ваш тест управляет определенным вводом и ожидает определенного вывода.

Это должно быть вашим первым приоритетом.

Помимо этого, действительно (не так много) есть смысл проверять, имеет ли код студента определенную структуру. Даже когда вы используете синтаксический анализатор исходного кода Java, будет множество способов правильно решить задание, которое не имеет (точной) структуры, которую вы ожидаете. Может быть, одному из ваших учеников действительно надоело набирать name1, name2, name3, и он сам решает, что «есть массивы для таких вещей», и использует это в своем решении. Вы бы хотели его за это наказать ?!

Таким образом, вы должны решить эту часть проблемы, которой она принадлежит: на мета / социальном уровне.

Другими словами: найдите для студентов хороший способ сесть вместе и просмотреть свой код. Вы можете попросить волонтера и представить его работу в классе, а затем поговорить о плюсах и минусах. Или вы создаете небольшие группы, и более опытный человек работает репетитором.

Не каждую «техническую» проблему нужно решать техническими решениями!

Я согласен с вашим классным подходом к этой конкретной проблеме в целом.

mpcsf 18.10.2018 16:41

Я согласен с вашим классным подходом к этой конкретной проблеме в целом. Однако знайте, что массивы / коллекции / списки еще не рассматривались в классе. Хотя я бы никогда не наказал студента за работу над чем-то «впереди» класса, они все еще работают над синтаксисом и примитивами - я включаю только строки, потому что это легко для студентов, которые только начинают использовать слова в качестве значений. Кроме того, студенты из отдаленных районов работают в своем собственном темпе. Я использую GitHub и другие инструменты для совместной работы, но я должен позволить студентам немедленно получать техническую обратную связь.

mpcsf 18.10.2018 16:49

@mpcsf Но тогда вопрос в том, действительно ли файл + компилятор + файлы классов - это то, что вам нужно. Разве не было бы более полезным дать студентам веб-интерфейс, в котором им нужно только указать части методов? Нравится то, что должно быть в основном методе? Как уже было сказано: когда структура имеет значение для вас, просмотр поведения файла класса вам не очень поможет.

GhostCat 18.10.2018 17:07

Другие вопросы по теме