Модульное тестирование продукта с файлом лицензии - PullRequest
3 голосов
/ 30 октября 2009

Я начал работать над продуктом, использующим файлы лицензий. Эти файлы должны быть прочитаны (и проверены), чтобы приложение работало. Это вызывает некоторые проблемы в модульных тестах, без соответствующей лицензии он генерирует исключения.

Мы используем NUnit, и мне нужно либо:

  • Скопируйте файл лицензии в каталог теневого копирования до запуска теста.
  • Установите рабочий каталог в исходную папку вывода сборки, чтобы имена файлов оставались действительными во временной тестовой папке.

Я знаю, что в модульных тестах, как правило, следует избегать доступа к файлам, но перед началом рефакторинга нам нужны модульные тесты, поэтому мне нужно, чтобы это работало.

Ответы [ 5 ]

1 голос
/ 30 октября 2009

Отключение функции теневого копирования в NUnit приведет к запуску тестов в той же выходной папке, в которой они были встроены. Но это также заблокирует новые сборки (так как файл используется). Плохое решение, я думаю, но решение все же.

1 голос
/ 30 октября 2009

Я предлагаю вам начать с чтения этой книги:

Эффективная работа с устаревшим кодом

Это даст вам много понимания того, как взломать этот тип проблемы. Будет некоторый уровень изменений, чтобы сделать такой код тестируемым, что должно произойти без тестов, но держите его как можно меньше и делайте это очень и очень осторожно.

В вашем случае, поскольку внедрение классов, которые являются поддельными лицензиями на чтение, слишком сложно, вы можете изменить класс, который проверяет файл лицензии, так, чтобы фактическая логика проверки была в одном методе запускается из одного метода, который сообщает остальной части класса, что с лицензией все в порядке, и делает этот метод виртуальным, а затем тестирует с подклассом, который переопределяет метод, делая вид, что он проверял файл.

Затем, если у вас есть несколько тестов для этого класса, вы можете сбросить метод и подкласс в пользу правильно введенного класса.

(отредактировано для ответа на тот факт, что проверка является сложной).

1 голос
/ 30 октября 2009

Я думаю, что вы нацеливаете свой тест слишком далеко вверх, вы можете написать тесты для функций дальше. Один общий тест не очень хороший способ сделать это, хотя я полагаю, это начало. Постарайтесь сбалансировать количество времени, потраченного на то, чтобы этот тест работал, и то, как это время может быть потрачено на тестирование более мелких и целевых единиц работы.

1 голос
/ 30 октября 2009

Вам нужно написать фиктивный класс, чтобы заменить класс, который читает файл лицензии. Вы можете использовать MOQ для достижения этой цели.

0 голосов
/ 30 октября 2009

Не обязательно отвечать на ваш вопрос, но обычно, когда мы покупаем лицензию на программный продукт, он обычно сопровождается какой-либо поддержкой. Может быть, неплохо было бы просто позвонить и посмотреть, есть ли у поставщика решение, которое он порекомендует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...