I can successfully run unit tests by passing file names separated by space. e.g.
>vstest.console.exe a.dll b.dll
But when I use PS script to do something like
> $TestDlls = Get-ChildItem -Path "Folder" -Filter "Test.*.dll" -Recurse -File
> $JoinedPath = $TestDlls -join " " #Try to join the paths by ' ' ??? Is it a wrong command?
> vstest.console.exe $JoinedPath
I got something unexpected...
Since $JoinedPath is a string with quotations like "a.dll b.dll"
So the vstest.console.exe will always receive a single "a.dll" (vstest.console.exe "a.dll b.dll")
I don't know how to express my problem precisely...
In short, I want to use powershell to simulate the command
vstest.console.exe a.dll b.dll
NOT
vstest.console.exe "a.dll b.dll"
I'm new to PowerShell I don't know if it is possible.
You can use an array to help you with arguments for command line utilities, especially when you need to start specifying parameter names.
$TestDlls = Get-ChildItem -Path $Folder -Filter "Test.*.dll" -Recurse # -File is not needed unless you have folders also named Test.*.dll
$VSTestArgs = @()
foreach ($TestDll in $TestDlls) {
$VSTestArgs = $VSTestArgs + $TestDll.FullName
}
& vstest.console.exe $VSTestArgs # & is the call operator.
If you have to add other arguments, you can do so by adding them after the foreach
block.
$TestDlls = Get-ChildItem -Path $Folder -Filter "Test.*.dll" -Recurse # -File is not needed unless you have folders also named Test.*.dll
$VSTestArgs = @()
foreach ($TestDll in $TestDlls) {
$VSTestArgs = $VSTestArgs + $TestDll.FullName
}
$VSTestArgs = $VSTestArgs + "/Settings:local.runsettings"
$VSTestArgs = $VSTestArgs + "/Tests:TestMethod1,testMethod2"
$VSTestArgs = $VSTestArgs + "/EnableCodeCoverage"
& vstest.console.exe $VSTestArgs
If the argument is separate to the parameter, which doesn't seem to be the case with this utility, you add the parameter and argument together like this.
$dotnetArgs = @()
$dotnetArgs = "new"
$dotnetArgs = "classlib"
$dotnetArgs = $dotnetArgs + "--output" + "TestLib"
$dotnetArgs = $dotnetArgs + "--name" + "TestLib"
$dotnetArgs = $dotnetArgs + "--language" + "C#"
& dotnet $dotnetArgs