Я бы посоветовал вам взглянуть на разработку через тестирование (TDD), так как я считаю, что этот метод поможет вам в решении проблем проектирования.При написании модульных тестов перед написанием рабочего кода вам нужно будет подумать о том, как сделать ваш рабочий код тестируемым.Это лучше, чем подход «тестирование позже», когда вы сначала пишете производственный код, а затем пытаетесь обойти их тестами.
Чтобы разобраться с зависимостями, подумайте о том, какие зависимости вызывают у вас проблемы.
Внешние зависимости
Если в ваших тестах используется внешний ресурс, такой как файл, то вы пишете интеграционный тест, а не модульный тест.Я написал много тестов, которые используют внешний файл, и я просто создал копию файла в своем тестовом проекте.Эта копия файла будет содержать фиктивные данные, необходимые для моих тестов.
Если для вашего теста требуется база данных, то снова вы пишете интеграционный тест.Лично я создаю локальную копию базы данных на своем ПК и запускаю свои тесты на нее.
Зависимости объектов
Если вы беспокоитесь о зависимостях кода (например, ваш тестпотерпит неудачу, если сигнатура частного метода будет изменена), тогда вы тестируете на неправильном уровне абстракции.Под этим я подразумеваю, чтобы ваши тесты вызывали публичные API, а не частные.Чтобы закрепить эту точку, используйте interfaces
для ваших объектов, чтобы обеспечить ожидаемый контракт для объекта, который его реализует.
Я бы также рекомендовал вам попробовать использовать фальшивую среду, такую как RhinoMocks , Moq или TypeMock
Среда моделирования поможет вам устранить зависимость, например, от наличия базы данных для ваших тестов.Я лично использую TypeMock, это не дешево, но это, безусловно, самый мощный инструмент там.