2016-05-04 9 views
1

私は、NUnit 2.6.3の結果を実行して処理するのに成功したPSスクリプトを持っています。私は最近NUnit 3.2.1にアップグレードし、NUnit実行可能ファイルに引数を渡すことに問題があります。タコから呼び出されたスクリプトは次のように展開:PowershellからNUnit 3を実行

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

過去にpowershellでプログラムを実行しようとしたときに、このarticleで練習5で多くの成功を収めました。しかし、私は数日前に同様の問題を抱えていたと思います。私は引数--deployat="yyyy-MM-dd HH:mm:ss"を1つの入力として処理しなければならず、dd HHのスペースが私を殺しています。私はInvoke-Expressionを使用して成功を収めました。#2のオプションは記事で審査されました。それは記事で述べたようにちょうど注意してください、これは危険な練習です。

0

ありがとう@Kai - はい、スペースは確かにロードブロッキングでした(参考にもありがとうございました。このアプリケーションでは、過剰なように思われるので、Invoke-Expressionを使用しないでください)。

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

    return $testParameters 
} 
:ここでの開発者の1つは、「QuickTests == --where猫」-OutputPath「WORKDIR」(これは #5 in your reference articleある)RunTests.ps1 -NunitArgsで動作するように思われ、これに拾って、次のことを示唆しました

NUnitを呼び出してください:

Write-Host "Executing: $(GetNUnitConsolePath) $testParameters" 
& $(GetNUnitConsolePath) $testParameters 
関連する問題