Добро пожаловать на ТАК! Вместо того, чтобы публиковать точные вопросы из домашних заданий, учебных пособий или заданий, вы должны сосредоточиться на Минимальном воспроизводимом примере , который выделяет конкретную проблему, которую вы хотели бы решить. Единственный исходный вопрос в реальном мире может привести к тому, что в SO будет размещено несколько отдельных вопросов, процесс выделения вашего примера часто приводит к большему пониманию и самому решению.
Ваше замечание, что вы знаете, что« 1 тестовый ввод из 10 дал неправильный ответ », но тот факт, что вы не знаете, какой именно, подчеркивает, что вы не пытались запустить этот код самостоятельно для комбинаций вне текста примера.
Изначально неясно, в чем ваша проблема, поэтому за этот вопрос так много проголосовали, поэтому я собираюсь помочь вам решить эту проблему, поделившись своими мыслямипо ходу дела.
Когда я запускаю ваш код, вывод почти совпадает с примером, я думаю, что ваш пример имеет некоторые ошибки, поэтому этот вывод выглядит правильно:
85
Harry Kane
Second half time.
Harry Kane SCORED A GOAL FROM PENALTY !!!
10
Messi
First half time.
Messi missed a penalty.
Messi was injured after the penalty.
25
Ronaldo
First half time.
Ronaldo received yellow card.
Ronaldo got another yellow card.
Но теперь вынужно проявить творческий подход и выполнить все критерии, указанные в вопросе, и доказать, что вы можете получить правильный результат.
Вы уже продемонстрировали, что знаете, как захватить имя из ввода и использовать его в выводе консоли, и вы также продемонстрировали изоляцию в своих ветвях if
, поэтому единственная проблема, с которой вы сталкиваетесь, - это как придуматьхороший способ проверить другие ветви в вашей логике.
Для логических сценариев, подобных этому, я всегда стараюсь сформулировать тестовый набор или модульные тесты, которые охватывают все граничные условия. Это может быть утомительным процессом, но с больше чем, меньше чем и равно сравнения, это единственный способ быть на 100% уверенным в правильности вашей логики.
Модульное тестирование и Тестовые комплекты - это методы, которые можно использовать для автоматизации тестирования, это код или приложение, которое запускает ваш код и предоставляет конкретные входные данные и сравнивает выходные данные из вашего кода сожидаемый результат.
Позволяет построить Матрицу ожидаемых результатов, но для простоты давайте сосредоточимся только на вводе времени. (как уже упоминалось выше, у вас есть название инъекции). Итак, определите все граничные условия для времени, включая минимальное и максимальное значения, и запишите ожидаемые результаты.
Граница для проверки - это число, напечатанное в бизнес-требовании. Чтобы проверить его надлежащим образом, необходимо проверить обе стороны этого числа, чтобы убедиться в правильности утверждения о равенстве:
"Если минуты находятся в диапазоне от 1 до 10 включительно"
Это требование имеет две границы, 1
и 10
, оператор inclusive
сообщает нам, что возможный диапазон включаетграничные значения, так или иначе, мы должны проверить следующие значения, чтобы подтвердить, что у нас есть правильные граничные условия: 0,1,2,9,10,11
В программировании довольно распространенослучайно отключено на 1, поэтому эта форма тестирования устраняет эти проблемы.
Мы также разделим тестирование на три матрицы результатов, по одной на первую строку, так как условия результата взаимоисключающие от остальных строк. один для второй строки, поскольку это четкая логическая ветвь, которая также дает результаты, исключающие другие условия, последний матрix покрывает третью строку вывода. Все они могут быть объединены в одну матрицу, но из-за этого становится сложнее определить, какая ветвь кода неправильная.
Тестовые примеры вывода первой строки
| Time | Expected First Line | First Line Output | Result |
|------|-------------------------|-----------------------|--------|
| 0 | Match has just started! | | |
| 1 | First half time. | | |
| 44 | First half time. | | |
| 45 | Second half time. | | |
| 46 | Second half time. | | |
|10000 | Second half time. | | |
Тестовые случаи вывода второй строки
Имя игрока для этих тестов будет "Px"
, что позволит сохранить вывод достаточно маленьким для отображения на этом форуме.
| Time | Expected Second Line | Second Line Output | Result |
|------|-----------------------------------|-----------------------|--------|
| 0 | | | |
| 1 | Px missed a penalty. | | |
| 9 | Px missed a penalty. | | |
| 10 | Px missed a penalty. | | |
| 11 | Px received a yellow card. | | |
| 34 | Px received a yellow card. | | |
| 35 | Px received a yellow card. | | |
| 36 | Px SCORED A GOAL !!! | | |
| 44 | Px SCORED A GOAL !!! | | |
| 45 | | | |
| 46 | Px got a freekick. | | |
| 54 | Px got a freekick. | | |
| 55 | Px got a freekick. | | |
| 56 | Px missed a shot from the corner. | | |
| 79 | Px missed a shot from the corner. | | |
| 80 | Px missed a shot from the corner. | | |
| 81 | Px SCORED A GOAL FROM PENALTY !!! | | |
| 89 | Px SCORED A GOAL FROM PENALTY !!! | | |
| 90 | Px SCORED A GOAL FROM PENALTY !!! | | |
| 91 | | | |
|10000 | | | |
Пока вышеупомянутые условия теста проходят, мы можем пропустить известное граничное тестирование для операторов второй строки и просто проверить границы, которые влияют на третью строку. Однако, поскольку условия третьей строки влияют на любое второе значение (сопоставленное с нечетными или четными числами), используйте границу и пройдите одну целую последовательность внутри диапазона, чтобы быть тщательными или, если вы автоматизируете контрольные примеры, вы должны проверить все возможные значения в пределахдиапазон. Здесь, если диапазон был достаточно большим, я поместил несколько случайных тестовых примеров.
| Time | Expected Third Line | Second Line Output | Result |
|------|------------------------------------------|-----------------------|--------|
| 1 | | | |
| 2 | Px was injured after the penalty. | | |
| 3 | | | |
| 8 | Px was injured after the penalty. | | |
| 9 | | | |
| 10 | Px was injured after the penalty. | | |
| 11 | Px got another yellow card. | | |
| 12 | | | |
| 13 | Px got another yellow card. | | |
| 22 | | | |
| 27 | Px got another yellow card. | | |
| 33 | Px got another yellow card. | | |
| 34 | | | |
| 35 | Px got another yellow card. | | |
| 36 | | | |
| 44 | | | |
| 45 | | | |
| 46 | Px missed the freekick. | | |
| 47 | | | |
| 50 | Px missed the freekick. | | |
| 53 | | | |
| 54 | Px missed the freekick. | | |
| 55 | | | |
| 56 | | | |
| 57 | Px has been changed with another player. | | |
| 58 | | | |
| 62 | | | |
| 65 | Px has been changed with another player. | | |
| 74 | | | |
| 79 | Px has been changed with another player. | | |
| 80 | | | |
| 81 | | | |
|10000 | | | |
Это моя оценка этих тестовых матриц, я представил это в два шага, чтобы продемонстрировать процесс, вы сначала идентифицируете ожидаемые результатыиз бизнес-требований, даже прежде чем писать какой-либо код. Знание всех фактов заранее поможет вам определить логику ветвления до того, как вы начнете писать какой-либо код.
Результат теста вывода первой строки
Только конкретныетекстовое значение отличается от бизнес-требования, когда время = ноль
| Time | Expected First Line | First Line Output | Result |
|------|-------------------------|-----------------------|--------|
| 0 | Match has just started! | Match has just began! | FAIL |
| 1 | First half time. | First half time. | Pass |
| 44 | First half time. | First half time. | Pass |
| 45 | Second half time. | Second half time. | Pass |
| 46 | Second half time. | Second half time. | Pass |
|10000 | Second half time. | Second half time. | Pass |
тестовые примеры для вывода на второй строке
Обратите внимание на орфографические ошибки в выходных данных, "получил желтую карточку" вместо "получил a желтую карточку" и "пропустил удар с угла" вместо "Пропустил выстрел из * угол"
Вы также должны учитывать граничные условия из этого Бизнес-требования:
- Если минуты больше 35 и меньше 45: "{Имя игрока} ОЦЕНИЛИ ЦЕЛЬ !!!"
- Если минуты больше 45 и меньше или равны 55. "{игрокname} получил штрафной удар. "
Обратите внимание, что нет условия, соответствующего 45в точности
| Time | Expected Second Line | Second Line Output | Result |
|------|-----------------------------------|-----------------------------------|--------|
| 0 | | | Pass |
| 1 | Px missed a penalty. | Px missed a penalty. | Pass |
| 9 | Px missed a penalty. | Px missed a penalty. | Pass |
| 10 | Px missed a penalty. | Px missed a penalty. | Pass |
| 11 | Px received a yellow card. | Px received yellow card. | FAIL |
| 34 | Px received a yellow card. | Px received yellow card. | FAIL |
| 35 | Px received a yellow card. | Px received yellow card. | FAIL |
| 36 | Px SCORED A GOAL !!! | Px SCORED A GOAL !!! | Pass |
| 44 | Px SCORED A GOAL !!! | Px SCORED A GOAL !!! | Pass |
| 45 | | Px SCORED A GOAL !!! | FAIL |
| 46 | Px got a freekick. | Px got a freekick. | Pass |
| 54 | Px got a freekick. | Px got a freekick. | Pass |
| 55 | Px got a freekick. | Px got a freekick. | Pass |
| 56 | Px missed a shot from the corner. | Px missed a shot from corner. | FAIL |
| 79 | Px missed a shot from the corner. | Px missed a shot from corner. | FAIL |
| 80 | Px missed a shot from the corner. | Px missed a shot from corner. | FAIL |
| 81 | Px SCORED A GOAL FROM PENALTY !!! | Px SCORED A GOAL FROM PENALTY !!! | Pass |
| 89 | Px SCORED A GOAL FROM PENALTY !!! | Px SCORED A GOAL FROM PENALTY !!! | Pass |
| 90 | Px SCORED A GOAL FROM PENALTY !!! | Px SCORED A GOAL FROM PENALTY !!! | Pass |
| 91 | | | Pass |
|10000 | | | Pass |
Тестовые примеры вывода третьей строки
Все эти условия проходят, в любом случае здесь результат матрицы
| Time | Expected Third Line | Third Line Output | Result |
|------|------------------------------------------|------------------------------------------|--------|
| 1 | | | Pass |
| 2 | Px was injured after the penalty. | Px was injured after the penalty. | Pass |
| 3 | | | Pass |
| 8 | Px was injured after the penalty. | Px was injured after the penalty. | Pass |
| 9 | | | Pass |
| 10 | Px was injured after the penalty. | Px was injured after the penalty. | Pass |
| 11 | Px got another yellow card. | Px got another yellow card. | Pass |
| 12 | | | Pass |
| 13 | Px got another yellow card. | Px got another yellow card. | Pass |
| 22 | | | Pass |
| 27 | Px got another yellow card. | Px got another yellow card. | Pass |
| 33 | Px got another yellow card. | Px got another yellow card. | Pass |
| 34 | | | Pass |
| 35 | Px got another yellow card. | Px got another yellow card. | Pass |
| 36 | | | Pass |
| 44 | | | Pass |
| 45 | | | Pass |
| 46 | Px missed the freekick. | Px missed the freekick. | Pass |
| 47 | | | Pass |
| 50 | Px missed the freekick. | Px missed the freekick. | Pass |
| 53 | | | Pass |
| 54 | Px missed the freekick. | Px missed the freekick. | Pass |
| 55 | | | Pass |
| 56 | | | Pass |
| 57 | Px has been changed with another player. | Px has been changed with another player. | Pass |
| 58 | | | Pass |
| 62 | | | Pass |
| 65 | Px has been changed with another player. | Px has been changed with another player. | Pass |
| 74 | | | Pass |
| 79 | Px has been changed with another player. | Px has been changed with another player. | Pass |
| 80 | | | Pass |
| 81 | | | Pass |
|10000 | | | Pass |
Ваш преподаватель, тьютор или профессор не собирается вручную кодировать каждый из этих критериев тестирования, он, скорее всего, будет использовать приложение или сценарий, который, как он знает, является правильным, и будет проходить через выбор чисел или всевозможные числа в заданном диапазоне и сравните вывод.
Если я провожу ваш код через все числа от 0 до 91, вы получите 40 правильных и 51 неправильных, исправление только выделенных проблем должно быть очень простым. Я надеюсь, вы сможете увидеть, как построение матрицы условий и результатов испытаний может помочь вам изолировать ответвления в бизнес-требованиях и как проверить наличие явных границ или предельных областей отказа.
Это особыйСам по себе навык, который вам понадобится развивать, если вы собираетесь стать хорошим инженером-программистом. Я выполнил это упражнение в коде, потому что я по сути ленивый парень, но пока вы не разработаете методы кода для этого, логические матрицы оченьЛегко оценить на бумаге, это поможет вам определить правильные входные данные для использования при самостоятельном тестировании вашего кода, прежде чем вы зарегистрируете его для рецензирования. Многие разработчики упускают из виду силу или самопроверку для большего количества условий, чем те, которые они придумали во время разработки. Не проверяйте код, в котором вы не уверены на 100% и не уверены на 100%, если вы не проверяли 100% возможных комбинаций в своих логических деревьях.