xUnit.net(.NET Core/ASP.NET Core)の使用を開始するページでは、dotnet test
を使用してテストを実行する方法について説明しています。コマンドライン。
特定のproject.jsonが必要であると記載されており、xunitの依存関係とテストランナーを追加します。
"testRunner": "xunit",
"dependencies": {
"xunit": "2.1.0",
"dotnet-test-xunit": "1.0.0-rc2-build10015"
}
親ディレクトリから呼び出そうとすると:
C:\git\Project\test [master ≡]> dotnet test
dotnet-test Error: 0 : System.InvalidOperationException: C:\git\Project\test\project.json does not exist.
at Microsoft.DotNet.Tools.Test.TestCommand.GetProjectPath(String projectPath)
at Microsoft.DotNet.Tools.Test.TestCommand.DoRun(String[] args)
C:\git\Project\test [master ≡]>
質問:単一のdotnet test
ですべてのテスト(複数project.json)を実行する方法はありますか?
ほぼ1か月が経ち、答えがないので、少なくとも私が行ってきたことを共有します。 (これは、Visual Studio "15" RTMが起動されると、 project.jsonが停止している )は関係ありません)
すべてのproject.jsonでfor
ループを使用するだけです。
ローカルでは、testディレクトリから、次のコマンドを実行します。
for /f %a in ('dir /b /s project.json ^| find /v "TestUtilities"') do dotnet test %a
パスに次の場所がある場合を除いて、すべてのproject.jsonで実行します:TestUtilities
TeamCityでは、%をエスケープする必要があることに注意してください(スクリプトでは、double:%%が必要です)。
for /f %%%a in ('dir /b /s project.json ^| find /v "TestUtilities"') do dotnet test %%%a
%%%に注意してください。 TeamCityの%は変数に使用されるため、3番目の%はそれをエスケープします。
誰かがWindowsの答えを探している場合に備えて、PowerShellのワンライナーがその仕事をします。
dir test | % { dotnet test $_.FullName }
Serilog の人たちは、CIパイプラインで複数のテストプロジェクトを構築する例を持っています。このPowerShellスクリプトを確認してください https://github.com/serilog/serilog/blob/dev/Build.ps1#L44
ありがとう Andrzej Lichnerowicz 最初のポインタをありがとう。私はAppVeyorとの統合を試みてきましたが、この修正がすべてのテストアセンブリを実行している間、テストが失敗してもビルドが壊れることはありませんでした。
次のレベルに進むと、PowerShellマクロを作成し、appveyorビルドにインポートしました...
version: 1.0.{build}
install:
- ps: Import-Module .\Appveyor.psm1
before_build:
- ps: dotnet restore
build:
verbosity: minimal
test_script:
- ps: Invoke-AppVeyorTest
...次に、次のマクロを実行しました。
function Invoke-AppVeyorTest
{
[CmdletBinding()]
param()
$result = "true"
Get-ChildItem NetCoreXunit* -Recurse -Directory | % {
$test_path = $_.FullName
$output = & dotnet test $test_path
if ($output -Match ", Failed: 0, ")
{
Write-Output "All tests passed in $test_path"
}
else
{
Write-Output "Located failed tests in $test_path"
$result = "false"
}
}
if ($result -eq "false")
{
$Host.ui.WriteErrorLine("Failed tests detected.")
exit 1
}
}
Appveyorはすべてのテスト結果を照合し、テストが失敗した場合はビルドが再度失敗します。
最近の プロジェクト検索アルゴリズムに関するgithubの問題 に関するCLIチームからの最新のフィードバックを考えると、これがコマンドラインを介してまったく可能になるとは思えません。
...チームは別の方向に進むことにしましたが。具体的には、すべてのコマンドに、クロージャが決定されるルートアーティファクトへのパスが必要になるようにすることにしました。
ただし、TFSビルドを使用している場合は、dotnet
ビルドステップ(現在は「プレビュー」)に「プロジェクト」と呼ばれるオプションがあり、ワイルドカードを受け入れるため、次の設定を使用してすべてのdotnetですべてのテストを実行します。
Command: 'test' Projects: '**/project.json'
ただし、**/project.jsonは、testrunner
が定義されていない場合でも、すべてのプロジェクトでテストを実行しようとするため、ビルドが失敗する可能性があることに注意してください。
クロスプラットフォームソリューションの場合、Nodeおよびforeach-cli
パッケージでNPMを使用できます。ルートフォルダーにpackage.json
がない場合は、npm init
を実行してから、次の手順を実行します。
npm install foreach-cli -D
package.json
:
"scripts : {
...
"test": "foreach -g 'test/**/project.json' -x 'cd #{dir} && dotnet test'"
}
テストを実行するには:
npm test