Где вы размещаете тестовый код, зависит от того, что вы намерены делать с кодом. Если это отдельный класс, который, например, вы намерены предоставить другим пользователям для загрузки и использования, тогда тестовый код должен быть проектом в рамках решения. Тест-код, помимо проверки того, что класс делает то, что вы хотели, чтобы сделать, представляет пример для пользователей вашего класса, поэтому он должен быть хорошо документирован и предельно ясен.
Если, с другой стороны, ваш класс является частью библиотеки или библиотеки DLL и предназначен для работы только внутри экосистемы этой библиотеки или библиотеки DLL, тогда должна быть тестовая программа или структура, которая использует DLL как сущность. Инструменты покрытия кода продемонстрируют, что тестовый код фактически реализует код. По моему опыту, эти тестовые программы, как и одна программа класса, построены как проект в рамках решения, которое создает DLL или библиотеку.
Обратите внимание, что в обоих вышеуказанных случаях тестовый проект не построен как часть стандартного процесса сборки. Вы должны построить его специально.
Наконец, если ваш класс должен быть частью более крупного проекта, ваш тестовый код должен стать частью любой структуры или потока процессов, которые были определены для вашей большой команды. В моем текущем проекте, например, тесты модулей разработчиков поддерживаются в отдельном дереве управления источником, который имеет структуру, параллельную структуре кода доставки. Модульные тесты необходимы для прохождения обзора кода как разработчиками, так и командой тестирования. Во время процесса сборки (каждый день прямо сейчас) мы создаем код доставки, затем тестируем блок, затем устанавливаем тестовый код QA. Модульные тесты запускаются до кода QA, и все должно пройти. Это почти тест на дым, чтобы убедиться, что мы не нарушили самый низкий уровень функциональности. Модульные тесты необходимы для создания отчета об отказе и выхода с отрицательным кодом состояния. Однако наши процессы, вероятно, более формальны, чем многие.
Вы используете платформу тестирования? Может быть, Юнит? – emills
нет, я просто написал код, который гарантирует, что мой Randomizer дает мне распределение случайных чисел, которые я хочу. НО Я не очень опытен с JUnit и хотел бы услышать какие-либо советы о том, как это работает, и помогает в процессе тестирования, если это имеет отношение к вопросу. : D –
JUnit и его эквиваленты чрезвычайно полезны. Для одного класса может потребоваться много тестов, чтобы гарантировать, что он работает, и эти тесты должны выполняться каждый раз, когда код изменяется. Собираетесь ли вы каждый раз запускать все тесты каждый раз? Возможно нет. JUnit автоматизирует эти тесты. –