(Во-первых, выкл., Состязательный TDD должен быть веселым. Это должна быть возможность для обучения. Это не должна быть возможность для ритуалов человеческого доминирования. Если нет места для юмора, тогда покиньте команду Извините. Жизнь коротка, чтобы тратить ее в негативной среде.)
Проблема здесь в плохо названных тестах. Если тест выглядел так:
foo = new Thing("Sally")
assertEquals("Sally", foo.getName())
Тогда держу пари, что он был назван "testGetNameReturnsNameField
". Это плохое имя, но не сразу, очевидно, так. Правильное название для этого теста "testGetNameReturnsSally
". Это то, что он делает. Любое другое имя уводит вас в ложное чувство безопасности. Так что тест плохо назван. Проблема не в коде. Проблема даже не в тесте. Проблема в названии теста.
Если бы тестер назвал тест "testGetNameReturnsSally
", то сразу было бы очевидно, что это, вероятно, не тестирование того, что нам нужно.
Поэтому разработчик обязан продемонстрировать неудачный выбор тестера. Разработчик также обязан писать только то, что от них требуют тесты.
Так много ошибок в работе происходит не потому, что код сделал меньше, чем ожидалось, а потому, что он сделал больше. Да, были модульные тесты для всех ожидаемых случаев, но не было тестов для всех особых крайних случаев, которые выполнял код, потому что программист подумал: «Лучше я тоже это сделаю, нам это, вероятно, понадобится», а затем забыл о Это. Вот почему TDD работает лучше, чем тест-после. Вот почему мы выбрасываем код после всплеска. Код может делать все, что вы хотите, но он, вероятно, делает то, что вам показалось нужным, а затем забыл о нем.
Заставьте автора теста проверить, что он действительно хочет. Пишите код только для прохождения тестов и не более.
RandomStringUtils - ваш друг.