Azure DevOpsのPipelineのtaskでMSTestを動かす方法
結論
PipelineのtaskでVSTestは使わず、DotNetCoreCLIのtestを使うこと
Azure DevOpsのテストの設定にはまる
Azure DevOpsのPipelineでMSTestを動かしたいと思いました。以前ユニットテストをAzure DevOpsにのせた時は特に苦労した覚えもなかったので(以前試したのは.NET FrameworkでAzure DevOpsもyamlではなくGUIで設定していました)、今回も特に苦労することは無いだろうと思っていました。ところがいざPipelineで動かそうと思ったら設定にめちゃめちゃはまりました。結局結論で解決出来たのですが、それまでに結構時間を取られたのでその行程を書いておきます。
Pipelineで動かす具体例
プロジェクトを作って、以下のようなテストを作ります。
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
int a = 1;
Assert.AreEqual(a, 1);
}
[TestMethod]
public void TestMethod2()
{
int a = 2;
Assert.AreEqual(a, 1);
}
}
}
ローカルでVisual Studioのテストエクスプローラーで動かせばTestMethod2は当然失敗します。
ところがこのプロジェクトをAzure DevOpesのPipelineのTaskにVSTestを作って動かした場合、このタスクは成功します!?
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
VSTestの設定を変えてみる
つまり、VSTestのデフォルトの設定ではテスト結果に連動して成功、失敗を返さない状態です。なんでデフォルトがこの状態になっているのか謎です。しょうがないので設定を変えてみました。先ずSelect tests usingという項目があって、Test assembliesになっていたので、Test runを選択してみました。runなら実行するだろうと。
ところがです。実はこれテストが成功の状態でも失敗になってしまいます。つまりただの設定ミスです。
エラーを調べてみる
##[error]Input validation failed with exception: Invalid on demand test run id 0. Has to be greater than 0.
##[error]Error: The process 'D:\a\_tasks\VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9\2.170.1\Modules\DTAExecutionHost.exe'
##[error]Input validation failed with exception: Invalid on demand test run id 0. Has to be greater than 0.
##[error]Error: The process 'D:\a\_tasks\VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9\2.170.1\Modules\DTAExecutionHost.exe'
エラーをググってみるとstackoverflow、GitHubのissues、MSの公式ドキュメントなど色々情報は出ます。設定が悪い、バージョンが悪い、パスが悪い、Visual Studio Test Platform Installerを入れろなど。調べた感じ掲示板で質問だけ投げていて答えが返ってない例や、色々話したけれど結局解決していない例なども出るのでみんなはまっているけれど解決出来ていないのかな?と思います。これ以外にもVSTestの設定を色々変えて、何十回もトライ&エラーしましたが、結局テスト結果と連動してVSTestが動くように出来ませんでした。(むしろこの解決方法は誰か教えて下さい)
Azure DevOpesのtaskを変えてみる
で、MSTestをテスト結果と連動して動かす方法ですが、VSTestを使わないことで解決しました。具体的には.NET Coreのtaskでtestを選ぶ。これだけです。
- task: DotNetCoreCLI@2
inputs:
command: 'test'
これで、何の設定を加えなくてもちゃんと実際のテスト結果と連動して動く状態になりました。
まとめ
MSTestを動かすのであれば、どう考えてもVSTest一択だと思っていたので、設定を色々変えて試した見ましたが、結局はVSTestを使わずDotNetCoreCLIのtestを使うという結論でした。Azure DevopsのデフォルトのyamlでもVSTestが設定されているので、VSTestのデフォルトの設定のままで普通にテスト結果と連動して動くようにして欲しいです。。
Author And Source
この問題について(Azure DevOpsのPipelineのtaskでMSTestを動かす方法), 我々は、より多くの情報をここで見つけました https://qiita.com/binnmti/items/a29e444c5ecc4ee23944著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .