2009-10-30 2 views
3

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

Мы используем NUnit и то, что мне нужно сделать, это либо:

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

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

ответ

1

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

0

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

+2

Похоже, что он является владельцем продукта, поэтому я не уверен, что это сработает. –

+0

Доминик прав, я работаю в компании, создающей приложение. – Mizipzor

+0

Почему downvote? Не было ничего в этом вопросе, чтобы указать, что он был владельцем в то время, когда я ответил? – jconlin

1

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

+0

Собственно, лицензия читается на очень низком уровне. Файлы лицензий создаются таким образом, чтобы вы могли «выбирать вишню» и платить только за нужные функции. Части кода, которым не нужна лицензия, для которой у нас уже есть тесты, но это крошечная доля. – Mizipzor

1

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

+0

Это было бы первым улучшением, если у нас будет лучший testuite. Я хочу быть уверенным, что рефакторинг ничего не сломает. Я предполагаю, что вы заявляете, что то, что я хочу сделать, просто не может быть сделано? – Mizipzor

+0

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

1

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

Working Effectively with Legacy Code

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

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

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

(Отредактировано с учетом того факта, что валидация сложна).

+0

Логика проверки является большой и сложной. Даже делать то, что вы предлагаете, - большой прыжок. Я просто хочу скопировать один файл. Это была большая ошибка, считая, что это будет просто. – Mizipzor

+0

@mizipzor, но можете ли вы отбить вызов этой логике с помощью одного метода? Если да, то не имеет значения, где остальная часть кода идет после этого. Этот единственный метод можно переопределить, чтобы избежать тестируемого поведения. – Yishai

Смежные вопросы