На ваш вопрос не так просто ответить, потому что, как вы говорите, «на самом деле это зависит от того, сколько времени у вас есть». Вот некоторые мнения:
Тест после реализации: Нет
Как программист, вы дорогой и дефицитный ресурс с несколькими сроками, сложенными друг на друга. Таким образом, это означает «никогда не проверять». После того, как вы реализовали один фрагмент кода, вы перейдете к следующему фрагменту кода и захотите вернуться к написанию тестов «когда у вас есть время» (у вас никогда нет времени).
Есть также проблемы, о которых вы упоминаете. Если вы выполняете все свои тесты после того, как код написан, и ваши тесты обнаруживают что-то принципиально неправильное, вы должны вернуться и исправить весь ваш код, а также все ваши тесты.
Проверка при внедрении: Да
Этот метод на самом деле очень полезен, как только вы получите для него ритм. Вы пишете немного класса, затем пишете немного модульного теста и постоянно пересматриваете свои тесты и свой код, пока не закончите. Я считаю, что это на самом деле быстрее, чем писать код без тестов.
Это также особенно полезно при работе над большим проектом. Запуск модульного теста, чтобы увидеть, работает ли маленький модуль, происходит мгновенно. Сборка и загрузка всего приложения, чтобы увидеть, работает ли маленький модуль, может занять несколько минут. Это также может нарушить вашу концентрацию (которая стоит не менее 10 минут).
Что тестировать: Насколько это возможно
100% тестовое покрытие, вероятно, никогда не практично. Но обязательно протестируйте критические части вашей программы, вещи, которые выполняют математические вычисления или много бизнес-логики. Проверьте все, что осталось, как можно больше. Нет причин проверять функцию «toString ()», если только это не имеет решающего значения для бизнес-логики или чего-то подобного.
Кроме того, ваши тесты должны быть максимально простыми, только входы и выходы. Большинство моих тестовых функций состоят из двух или трех строк. Если вашу функцию сложно протестировать из-за слишком большого количества комбинаций, это признак того, что ваша функция, возможно, должна быть немного разбита. Обязательно протестируйте крайние случаи и «невозможные» сценарии.