.NETで作る!

.NETに関するあれこれ(C#、VB.NET)

Jenkinsに単体テスト(MSTest)をさせる

mk3008net.hatenablog.com

これの続きで、Jenkinsに単体テスト(MSTest)をさせます。

Jenkinsの設定-アドイン

「Jenkinsの管理>プラグインの管理>利用可能タブ」からアドインを追加しましょう。

  • MSTest plugin
  • MSTestRunner plugin

Jenkinsの設定-システムの設定

「Jenkinsの管理>プラグインの管理」でMSTest pluginの設定をしましょう。

MSTest plugin

Name : Visual Studio 12.0
Path to MSTest : C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe

PathにMSTest.exeへのフルパスを指定。Visual Studio 2013(Community Edition)*1をインストールしている場合は上述のような感じになります。

ジョブ

前回のジョブのビルドを以下のように変更します。

  1. 単体テストプロジェクトをDebugでコンパイル
  2. TestResultsディレクトリ(ソリューション)を初期化
  3. MSTestRunnerを使用して単体テスト実行
  4. 最後に本体のプロジェクト(ソリューション)をReleaseでコンパイル

MSTestで単体テストを実行するには、単体テストプロジェクトのDLLが必要になるので、先にコンパイルしてきます。

と、その前に、作業ディレクトリが「C」のままでしたので「高度な設定」で適当なディレクトリに変えときましょう。

D:\Users\USER_NAME\Document\Jenkins\PROJECT_NAME

f:id:mk3008net:20150329193227p:plain

単体テストプロジェクトをDebugでコンパイル

これはMSBuild の設定をするだけなので、基本的に前回と同じ。Releaseでコンパイルする必要がないので、引数は

Command Line Arguments : /t:Clean;Rebuild /p:Configuration=Debug /nologo

こんな感じにしておきましょう。

TestResultsディレクトリ(ソリューション)を初期化

これは「Windowsバッチコマンドの実行」で実装しましょう。

rd "D:\Users\****\Document\Jenkins\****\tests\TestResults" /s /q
md "D:\Users\****\Document\Jenkins\****\tests\TestResults"

MSTestRunnerを使用して単体テスト実行

ここが本題。「Run unit tests with MSTest」を以下のように設定します。

Ms Test Version : Visual Studio 12.0
Test Files : D:\Users\****\Document\Jenkins\****\tests\Test.Kairyu\bin\Debug\Test.Kairyu.dll
Result File Name : D:\Users\****\Document\Jenkins\****\tests\TestResults\Test.Kairyu.Results.trx
Command Line Arguments : /nologo

最後に本体のプロジェクト(ソリューション)をReleaseでコンパイル

これは前回のヤツそのままなので、特になし。

実行結果

こんな感じ。

結果            トップ レベルのテスト
--            -----------
失敗しました        Test.Kairyu.ConnectionTest.ToLoaderTest
失敗しました        Test.Kairyu.CustomNameTest.LoadToItem
成功            Test.Kairyu.EntityDefinitionTest.PrefixName
成功            Test.Kairyu.IgnoreArchiveTest.IsDirty_Change
成功            Test.Kairyu.IgnoreArchiveTest.IsDirty_NoChange
成功            Test.Kairyu.IgnoreArchiveTest_List.IsDirty_Change
成功            Test.Kairyu.IgnoreArchiveTest_List.IsDirty_NoChange_Any
成功            Test.Kairyu.IgnoreArchiveTest_List.IsDirty_NoChange_Nothing
(略)
失敗しました        Test.Kairyu.UpperSaveTest_Reference.SaveAsNew_List_Reference
88/155 テスト 成功, 67 失敗しました

概要
--
テストの実行 失敗しました です。
  失敗しました  67
  成功      88
  -----------
  合計      155

Result File Name で指定した trx ファイルを開けばエラーの詳細が分かります。

f:id:mk3008net:20150329201728p:plain

ちなみにエラーは

System.Data.SqlClient.SqlException: 
System.Data.SqlClient.SqlException: 
CREATE TABLE 権限がデータベース 'tempdb' で拒否されました。   

でした。VSからやれば正常に動作するんですけどねぇ。Windows認証に失敗してるならわかるけど、CreateTable権限がない?ちょいよくわかりませんね。

*1:SDKだけだとMSTestはインストールされないのかな?未確認。

. .