ユニットテストの成功に基づいて、Azure DevOps(VSTS)にゲートチェックインプロセスを実装しようとしています。ただし、アセンブリが見つからないという警告/エラーが常に表示されます。
##[warning]No test assemblies found matching the pattern: **\*Test*.dll,!**\*TestAdapter.dll,!**\obj\**.
##[debug]Processed: ##vso[task.issue type=warning;]No test assemblies found matching the pattern: **\*Test*.dll,!**\*TestAdapter.dll,!**\obj\**.
======================================================
すべての単体テストは、Visual Studio 2017のローカルのテストエクスプローラーで正常に実行されます。
Azure DevOpsのドキュメント は単純なように見えますが、私がフォローすると機能しません。
ホストされているVS2017エージェントを使用しています。 CIビルド自体は、TFSソース管理へのチェックイン時に成功します。
「古い」.NETのファイルは、Releaseフォルダー(BuildConfiguration
変数で記述)にありました。
.NET Coreビルドには追加のフォルダーが含まれています。
_YourNamespaceHere.UnitTests > bin > Release > netcoreapp2.1 > dll's
_
ワイルドカードを追加すると、ビルドでunittest dllが見つかります。
**\$(BuildConfiguration)\*\*unittests.dll
プロジェクトには統合テストも含まれているため、_*Tests*
_パーツの名前を_*unittests.dll
_に変更しました。
.Net Core 2.1プロジェクトでも同じ問題が発生しました。追加する「その他のコンソールオプション」で:
/Framework:.NETCoreApp,Version=v2.1 /logger:console;verbosity="normal"
これとは関係のない別の問題がありましたが、同じ問題でした。 TestPlatform dllのテストファイル結果出力が見つからないというエラーが発生しました。そこで、このフィルターを既存のテストファイルに追加しました。
!**\*Microsoft.VisualStudio.TestPlatform*
私の最終的なyamlは次のようになります:
- task: VSTest@2
displayName: 'Run Unit Tests'
inputs:
testAssemblyVer2: |
**\$(BuildConfiguration)\*test*.dll
**\$(BuildConfiguration)\**\*test*.dll
!**\*Microsoft.VisualStudio.TestPlatform*
!**\obj\**
vstestLocationMethod: 'location'
vstestLocation: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\'
codeCoverageEnabled: True
otherConsoleOptions: '/platform:x64 /Framework:.NETCoreApp,Version=v2.1 /logger:console;verbosity="normal" '
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
単体テストタスクを実行したいときにも同じ問題が発生しました(.Net Coreを使用しています)。パスの命名の問題のようです。私のユニットテストプロジェクトが呼び出されます
SimpleExample.UnitTests
しかし、YAMLファイルの「DotNetCoreCLI @ 2」タスクのパスは、
'**/*テスト/*.csproj'
したがって、単体テストタスクのプロジェクトパスをVisual Studioの単体テストプロジェクトの2番目の部分(ドットの後)のように変更するだけです。
Visual Studio 2017の単体テストプロジェクトのパス:Desktop\Azure-DevOps-Test\SimpleExample.UnitTests
単体テストを実行するYAMLタスク[.Netプロジェクトの場合]:
- task: DotNetCoreCLI@2
displayName: 'Runing Unit Tests'
inputs:
command: test
projects: '**/*UnitTests/*.csproj'
arguments: '--configuration $(buildConfiguration)'
同じ問題があり、さまざまなファイルマッチングパターンや.NET Coreのバージョンなどを試してみました。
私のビルドパイプラインは、テストをアーティファクトディレクトリに公開していました。これは、publishコマンドで簡単に実行できます。しかし、私のテストエージェントはアーティファクトをダウンロードしておらず、それが問題でした。デプロイメントとテストに異なるエージェントを使用していたため、デプロイメントエージェントはリソースにアクセスできたがテストエージェントはアクセスできなかったため、問題が発生していることに気付きませんでした。
エージェント構成タブの[アーティファクトのダウンロード]セクションでアーティファクトをダウンロードするように選択したことを確認します。それはずっと下にあり、私はデフォルトでそれが私のビルドパッケージを示したと思います、それはそれがダウンロードされているように思わせます。しかし、私はまだそれを拡張して、「すべてのアーティファクトを選択する」オプションをチェックする必要がありました。正しく構成されている場合、デプロイメントログに「アーティファクトのダウンロード」タスクが含まれているはずです。
私のビルドパイプラインの公開タスク:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/*ServiceTests.csproj'
arguments: '-c $(buildConfiguration) -o $(Build.ArtifactStagingDirectory)/servicetests'
modifyOutputPath: false
zipAfterPublish: false