Как выбрать правильные тестовые проекты для этого решения с помощью Rake/Albacore?

Я пишу свой rakefile, и он отлично строится. Тем не менее, я пытаюсь выяснить шаблон для перечисления dll тестового проекта для запуска nunit.

Мои проекты для этого решения находятся в папке с множеством других проектов и множеством других тестовых проектов, поэтому я не могу просто запустить все тесты из всех проектов, в имени которых есть .test или что-то в этом роде. Я не могу заглянуть в папку bin, которую создает сборка, потому что, хотя тестовые проекты находятся в решении, на них не ссылается основной проект (в данном случае проект mvc).

Можно ли каким-либо образом запросить файл sln, чтобы получить список тестовых проектов и получить из него библиотеки DLL? или я должен ссылаться на свои тестовые проекты в основном проекте, чтобы я мог вытащить DLL из корзины? Должен ли я просто заткнуться и жёстко ссылаться на код тестовых проектов?

Спасибо,

R


person Raif    schedule 28.10.2013    source источник


Ответы (1)


Раиф, я беспокоюсь, основываясь на структуре вашего решения/проекта, что вы ответили на свой вопрос... самое "очевидное" решение - заткнуться и жестко закодировать их;) Это не ужасный вариант, и он дает вам тесты в вашей сборке прямо сейчас.

nunit :test do |nunit|
  nunit.command = "whatever.exe"
  nunit.assemblies = [
    "source/foo.tests/bin/Release/foo.tests.dll",
    "source/bar.tests/bin/Release/bar.tests.dll"
  ]
end

Если вы хотите причудливый метод, вам придется внести некоторые изменения. Вы можете добавить что-то к названиям тестовых проектов, чтобы отличить их от других. Затем вы просто ищете их все в правильном корне.

nunit :test do |nunit|
  nunit.command = "whatever.exe"
  nunit.assemblies = FileList["source/**/bin/Release/*.myfoo.tests"]
end

Или измените сборку тестового проекта, чтобы переместить выходные данные в общую папку, чтобы вы могли собирать тестовые сборки оттуда.

msbuild :build_tests do |msb|
  # ... all your other configuration ...
  msb.properties = { 
    :outputpath => (File.expand_path "bin/Tests/Release")
  }
end

nunit :test => [:build_tests] do |nunit|
  nunit.command = "whatever.exe"
  nunit.assemblies = FileList["bin/Tests/Release/*.tests.dll"]
end

В конце концов, я думаю, у вас есть проблемы посерьезнее. Почему ваши тестовые сборки не собираются вместе с вашим основным решением/проектом? Решите эту проблему, и тогда они будут в выходном пути. Попробуйте назначить единый глобальный выходной путь, чтобы все ваши материалы были в одном месте (и вам не приходилось искать). И, что более важно, что представляют собой все эти другие тестовые проекты в вашем решении? Почему их не запускают? Похоже, у вас есть более одной логической программы в решении, и, возможно, их нужно разделить.

person Anthony Mastrean    schedule 29.10.2013
comment
Спасибо за идеи. Во-первых, я полагаю, что, должно быть, пропустил речь. Мои тестовые проекты строятся с помощью sln. Проблема заключается в том, что поскольку тестовые проекты находятся в общей папке проектов со многими проектами, содержащими несколько разных решений в разных конфигурациях, трудно понять, какие тестовые проекты запускать. В sln-файле, конечно, есть список правильных проектов, но я не хочу пытаться разобрать его, чтобы получить список. Я думаю, что одна из ваших идей может сработать. После сборки скопируйте тестовые dll в тестовую папку. Но тогда мне все равно пришлось бы жестко кодировать правильные проекты. - person Raif; 30.10.2013
comment
Так что я думаю, что оба были правы, заткнись и жестко кодируй это. Я просто хочу, чтобы sln мог сбрасывать все скомпилированные библиотеки DLL в папку артефактов сборки. Ну что ж. еще раз спасибо. - person Raif; 30.10.2013
comment
Хорошо, тогда, когда вы создаете свое решение, должны быть созданы правильные тестовые проекты. По умолчанию проекты создаются в каталоге, относящемся к проекту, например fooproj/bin/Release. Если вы измените свойство OutputPath на команду msbuild, вы сможете собрать все свои сборки в одном месте! Поэкспериментируйте с ним, но мне нравится использовать полный путь (вы увидите пример в моем третьем кодовом блоке). - person Anthony Mastrean; 30.10.2013