यदि आप अपने यूनिट टेस्ट प्रोजेक्ट को हार्डकोड नहीं करना चाहते हैं, तो आप अपने यूनिट टेस्ट प्रोजेक्ट के सभी हड़पने के लिए स्क्रिप्ट लिखने से बेहतर हैं। हम इसे पॉवर्सशेल के साथ करते हैं और अपने यूनिट टेस्टिंग प्रोजेक्ट्स के नामकरण के लिए एक विशिष्ट सम्मेलन का पालन करते हैं। यहां पॉवरशेल फ़ाइल की सामग्री दी गई है जो हमारी इकाई परीक्षण चलाती है:
param(
[string] $sourceDirectory = $env:WORKSPACE
, $fileFilters = @("*.UnitTests.dll", "*_UnitTests.dll", "*UnitTests.dll")
, [string]$filterText = "*\bin\Debug*"
)
#script that executes all unit tests available.
$nUnitLog = Join-Path $sourceDirectory "UnitTestResults.txt"
$nUnitErrorLog = Join-Path $sourceDirectory "UnitTestErrors.txt"
Write-Host "Source: $sourceDirectory"
Write-Host "NUnit Results: $nUnitLog"
Write-Host "NUnit Error Log: $nUnitErrorLog"
Write-Host "File Filters: $fileFilters"
Write-Host "Filter Text: $filterText"
$cFiles = ""
$nUnitExecutable = "C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console-x86.exe"
# look through all subdirectories of the source folder and get any unit test assemblies. To avoid duplicates, only use the assemblies in the Debug folder
[array]$files = get-childitem $sourceDirectory -include $fileFilters -recurse | select -expand FullName | where {$_ -like $filterText}
foreach ($file in $files)
{
$cFiles = $cFiles + $file + " "
}
# set all arguments and execute the unit console
$argumentList = @("$cFiles", "/framework:net-4.5", "/xml=UnitTestResults.xml")
$unitTestProcess = start-process -filepath $nUnitExecutable -argumentlist $argumentList -wait -nonewwindow -passthru -RedirectStandardOutput $nUnitLog -RedirectStandardError $nUnitErrorLog
if ($unitTestProcess.ExitCode -ne 0)
{
"Unit Test Process Exit Code: " + $unitTestProcess.ExitCode
"See $nUnitLog for more information or $nUnitErrorLog for any possible errors."
"Errors from NUnit Log File ($nUnitLog):"
Get-Content $nUnitLog | Write-Host
}
$exitCode = $unitTestProcess.ExitCode
exit $exitCode
स्क्रिप्ट इतनी मजबूत है कि हम अपनी सभी बिल्ड नौकरियों के लिए पुन: उपयोग कर रहे हैं। यदि आपको NUnit कंसोल के लिए पूर्ण पथ पसंद नहीं है, तो आप हमेशा उस स्थान को अपने PATH परिवेश चर में रख सकते हैं।
तब हम अपने बिल्ड सर्वर पर RunUnitTests.ps1 फ़ाइल डालते हैं और इस बैच कमांड का उपयोग करते हैं:
powershell.exe -file "{full-path-to-script-direcory}\RunUnitTests.ps1"