Это зависит от того, как вы планируете реализовать рабочий процесс тестирования.
Bad:
Разработчик пишет свой код, а другой человек затем пытается добавить модульные тесты для проверки этого кода. Проблема здесь в том, что разработчику не нужно писать код, который легко тестируется. Много времени может быть потрачено либо на то, чтобы адаптировать модульные тесты к плохо тестируемому коду, либо время будет потрачено на рефакторинг исходного кода, чтобы потом лучше тестироваться.
Хорошо:
Другой человек, кроме разработчика, пишет модульные тесты, а затем разработчик пишет свой код, пытаясь перевести все эти тесты на зеленый. Поначалу это может быть немного неудобно, потому что для реализации тестов должны существовать некоторые базовые интерфейсы, но базовые интерфейсы должны быть определены в проектной документации, чтобы разработчик мог подготовить интерфейсы для разработчика тестов. Преимущество состоит в том, что разработчик тестов пытается написать столько тестов, сколько он может придумать, независимо от реальной реализации, в то время как первоначальный разработчик написал бы тесты в зависимости от внутренней части своего кода, не представляя других проблем. В противном случае он бы защищался от них в своей реализации.
«Хороший» подход хорошо работал в двух моих проектах, но мы использовали нетипизированный язык (Smalltalk), где нам нужно было только согласовать имена классов для запуска тестов. В Java вы должны реализовать хотя бы интерфейс для вызова функций.