2016-05-04 3 views
1

У меня есть сценарий PS, который я успешно использовал для запуска и обработки результатов из NUnit 2.6.3. Недавно я обновился до NUnit 3.2.1, и у меня возникли проблемы с передачей аргументов в исполняемый файл NUnit. Скрипт вызывается из осьминога развернуть так:Запуск NUnit 3 от Powershell

RunTests.ps1 -NunitArgs "--where cat==QuickTests" -OutputPath "workdir" 

Аргументы обрабатываются здесь:

param(
    [string]$OutputPath = "testResults", 
    [string]$NunitArgs = "nunitOptions" 
) 

NUnit называется (с линией, чтобы повторить команду):

function GetNUnitConsolePath 
{ 
    return join-path -path ${env:ProgramFiles(x86)} -childpath "NUnit-3.2.1\bin\nunit3-console.exe" 
} 

... 

Write-Host "Executing: $(GetNUnitConsolePath) Test.dll $NunitArgs --work==$OutputPath" 
& $(GetNUnitConsolePath) Test.dll $NunitArgs --work==$OutputPath 

в результате чего:

Executing: C:\Program Files (x86)\NUnit-3.2.1\bin\nunit3-console.exe Test.dll --where cat==QuickTest 
s --work=workdir 
NUnit Console Runner 3.2.1 
Copyright (C) 2016 Charlie Poole 

Invalid argument: --where cat==QuickTests 

Следующая строка кода работает, как ожидалось от сценария PS:

& $(GetNUnitConsolePath) Test.dll --where cat==QuickTests --work=workdir 

Тесты запуска и рабочий каталог категория фильтра & устанавливаются как ожидалось:

NUnit Console Runner 3.2.1 
Copyright (C) 2016 Charlie Poole 

Runtime Environment 
    OS Version: Microsoft Windows NT 6.3.9600.0 
    CLR Version: 4.0.30319.34209 

Test Files 
    Test.dll 

Test Filters 
    Where: cat==QuickTests 


Run Settings 
    WorkDirectory: workdir 
    ImageRuntimeVersion: 4.0.30319 
    ImageTargetFrameworkName: .NETFramework,Version=v4.5 
    ImageRequiresX86: False 
    ImageRequiresDefaultAppDomainAssemblyResolver: False 
    NumberOfTestWorkers: 8 

Test Run Summary 
    Overall result: Passed 

Я также попытался:

$arg1 = 'Test.dll' 
$arg2 = '--where cat==QuickTests' 
$arg3 = '--work=workdir' 
Write-Host "Executing: $(GetNUnitConsolePath) $arg1 $arg2 $arg3" 
& $(GetNUnitConsolePath) $arg1 $arg2 $arg3 

Это приводит к тому же выход из NUnit:

Executing: C:\Program Files (x86)\NUnit-3.2.1\bin\nunit3-console.exe Test.dll --where cat==QuickTest 
s --work=workdir 
NUnit Console Runner 3.2.1 
Copyright (C) 2016 Charlie Poole 

Invalid argument: --where cat==QuickTests 

Я PS noob, так что, надеюсь, это нечто очевидное, я забыл в сценарии. Я также пробовал различные итерации Invoke-Command с -ArgumentList, но с этим ничего не получал. Все конструктивные предложения приветствуются - спасибо!

ответ

0

У меня был большой успех с практикой № 5 в этом article при попытке выполнить программы в PowerShell в прошлом. Тем не менее, я думаю, что у меня была аналогичная проблема пару дней назад. Мне приходилось иметь дело с аргументом --deployat="yyyy-MM-dd HH:mm:ss" как единый вход, а пространство между dd HH убивает меня. Я закончил с успехом, используя Invoke-Expression, # 2 вариант, реферируемый в статье. Просто будьте осторожны, как говорится в статье, это опасная практика.

0

Спасибо @Kai - да, пространство действительно было блокпостом (спасибо также за ссылку. Я надеялся избежать использования Invoke-Expression, так как для этого приложения это казалось излишним). Один из разработчиков здесь также взял на этом и предложил следующее, что, кажется, работает с RunTests.ps1 -NunitArgs «--where кошачьих == QuickTests» -OutputPath «WORKDIR» (это #5 in your reference article):

function CreateTestParameters($timeString) 
{ 
    $optArr = $nunitArgs -split ' ' 
    $testParameters = @() 
    $testParameters += 'Test.dll' 
    $testParameters += $optArr[0] 
    $testParameters += $optArr[1] 
    $resultsParentPath = CreateResultsParentPath($timeString) 
    $testParameters += "--work=" + $resultsParentPath 

    return $testParameters 
} 

И называть NUnit:

Write-Host "Executing: $(GetNUnitConsolePath) $testParameters" 
& $(GetNUnitConsolePath) $testParameters 
Смежные вопросы