Для TDD вы должны
- Создать тест, который не работает
- Простейшая вещь, которая могла бы сработать, чтобы пройти тест
- Добавьте несколько вариантов теста и повторите
- Рефакторинг при появлении шаблона
При таком подходе вы предполагаете охватить все случаи (что приходит мне на ум, по крайней мере), но мне интересно, неужели я слишком строг здесь, и если можно "задуматься", некоторые сценарии вместо просто обнаружить их.
Например, я обрабатываю файл, и если он не соответствует определенному формату, я должен бросить InvalidFormatException
Итак, мой первый тест:
@Test
void testFormat(){
// empty doesn't do anything nor throw anything
processor.validate("empty.txt");
try {
processor.validate("invalid.txt");
assert false: "Should have thrown InvalidFormatException";
} catch( InvalidFormatException ife ) {
assert "Invalid format".equals( ife.getMessage() );
}
}
Я запускаю его, и он терпит неудачу, потому что он не генерирует исключение.
Итак, следующее, что приходит мне на ум, - это "Простейшая вещь, которая могла бы работать", поэтому я:
public void validate( String fileName ) throws InvalidFormatException {
if(fileName.equals("invalid.txt") {
throw new InvalidFormatException("Invalid format");
}
}
Doh!! (хотя реальный код немного сложнее, я обнаружил, что сам делал что-то подобное несколько раз)
Я знаю, что я должен в конечном итоге добавить другое имя файла и другой тест, который сделает этот подход нецелесообразным, и это заставит меня реорганизовать что-то, что имеет смысл (что, если я правильно понял, является точкой TDD, чтобы обнаружить шаблоны, которые предлагает использование), но:
Q: Я беру слишком буквальный материал "Делают простейшую вещь..."?