LoginSignup
1
0

More than 3 years have passed since last update.

Azure DevOpsのPipelineのtaskでMSTestを動かす方法

Posted at

結論

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は当然失敗します。
image.png

ところがこのプロジェクトをAzure DevOpesのPipelineのTaskにVSTestを作って動かした場合、このタスクは成功します!?

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

image.png

VSTestの設定を変えてみる

つまり、VSTestのデフォルトの設定ではテスト結果に連動して成功、失敗を返さない状態です。なんでデフォルトがこの状態になっているのか謎です。しょうがないので設定を変えてみました。先ずSelect tests usingという項目があって、Test assembliesになっていたので、Test runを選択してみました。runなら実行するだろうと。
image.png

これで無事タスクは失敗になりました。
image.png

ところがです。実はこれテストが成功の状態でも失敗になってしまいます。つまりただの設定ミスです。

エラーを調べてみる

##[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' 

エラーをググってみるとstackoverflowGitHubのissuesMSの公式ドキュメントなど色々情報は出ます。設定が悪い、バージョンが悪いパスが悪いVisual Studio Test Platform Installerを入れろなど。調べた感じ掲示板で質問だけ投げていて答えが返ってない例や、色々話したけれど結局解決していない例なども出るのでみんなはまっているけれど解決出来ていないのかな?と思います。これ以外にもVSTestの設定を色々変えて、何十回もトライ&エラーしましたが、結局テスト結果と連動してVSTestが動くように出来ませんでした。(むしろこの解決方法は誰か教えて下さい)

Azure DevOpesのtaskを変えてみる

で、MSTestをテスト結果と連動して動かす方法ですが、VSTestを使わないことで解決しました。具体的には.NET Coreのtaskでtestを選ぶ。これだけです。

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'

これで、何の設定を加えなくてもちゃんと実際のテスト結果と連動して動く状態になりました。

成功した場合
image.png
image.png

失敗した場合
image.png
image.png

まとめ

MSTestを動かすのであれば、どう考えてもVSTest一択だと思っていたので、設定を色々変えて試した見ましたが、結局はVSTestを使わずDotNetCoreCLIのtestを使うという結論でした。Azure DevopsのデフォルトのyamlでもVSTestが設定されているので、VSTestのデフォルトの設定のままで普通にテスト結果と連動して動くようにして欲しいです。。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0