Как да избера правилните тестови проекти за това решение с помощта на Rake/Albacore?

Пиша моя ракефайл и го изграждам добре. Въпреки това се опитвам да разбера модел за изброяване на dlls на тестовия проект за изпълнение на nunit.

Моите проекти за това решение са в папка с много други проекти и много други тестови проекти, така че не мога просто да стартирам всички тестове от всички проекти, които имат .test в името си или нещо подобно. Не мога да погледна в папката bin, която създава компилацията, защото докато тестовите проекти са в решението, те не са посочени от основния проект (проект mvc в този случай).

Има ли все пак да проучите sln файла, за да получите списъка с тестови проекти и да получите dlls от него? или трябва да реферирам моите тестови проекти в основния проект, за да мога да извадя 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, можете да изградите всичките си сборки на едно място! Експериментирайте с него, но ми харесва да използвам напълно квалифициран път (ще видите пример в моя 3-ти кодов блок). - person Anthony Mastrean; 30.10.2013