Webのユニットテスト⑦ .NET
前回の続きです。
いろいろなブラウザでのユニットテストを実行する、Hudsonの分散プロジェクトを作ってみます。
の続編です。
default.buildなどを置く
以前に作ったdefault.build等を「【SampleJob】WEB+DBユニットテスト(.NET)①デプロイ」のプロジェクト直下に置きます。
default.build
coverage.build
以下のファイルを変更しています。
■default.build
テストで使用するブラウザを切り替える為にApp.configの更新処理とSeleniumServerの起動・停止処理を追加しました。
AntではBrowserTypeをプロパティ値で参照できたのですが、NAntからはプロパティ値を取得できなかったので、
Hudsonが設定した環境変数(BUILD_TAG)からBrowserTypeを強引に取得しています。
<?xml version="1.0" encoding="utf-8"?> <project name="UnitTestProject" default="build" basedir="."> <!-- ========================================================== --> <!-- 定義値 --> <!-- ========================================================== --> <!-- .NETバージョン --> <property name="nant.settings.currentframework" value="net-3.5" /> <!-- プロジェクト名 --> <property name="project.name" value="WebAndNDbUnitSample"/> <!-- 出力ディレクトリ --> <property name="bin.dir" value="bin"/> <!-- テスト結果ファイル格納ディレクトリ --> <property name="report.dir" value="report"/> <!-- スクリーンショット格納ディレクトリ --> <property name="screenshot.dir" value="screenshot"/> <!-- IISディレクトリ --> <property name="iis.dir" value="C:/Inetpub/wwwroot/${project.name}"/> <!-- SeleniumServerの起動コマンド --> <property name="start.seleniumServer.command" value="${project.name}Test/selenium-server-run.bat"/> <!-- SeleniumServer停止URL --> <property name="stop.seleniumServer.url" value="http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer"/> <!-- ========================================================== --> <!-- NAntタスク実行順序 --> <!-- ========================================================== --> <target name="build"> <call target="clean" /> <call target="compile" /> <call target="deploy" /> </target> <target name="build-unitTest"> <call target="clean-unitTest" /> <call target="unitTest" /> </target> <target name="build-unitTest-coverage"> <call target="clean-unitTest" /> <call target="update.App.config" /> <nant buildfile="coverage.build" target="coverage" /> </target> <!-- ========================================================== --> <!-- ディレクトリをクリア --> <!-- ========================================================== --> <target name="clean"> <delete dir="${bin.dir}" /> <mkdir dir="${bin.dir}" /> </target> <!-- ========================================================== --> <!-- ディレクトリをクリア(ユニットテスト用) --> <!-- ========================================================== --> <target name="clean-unitTest"> <delete dir="${report.dir}" /> <delete dir="${screenshot.dir}" /> <mkdir dir="${report.dir}" /> <mkdir dir="${screenshot.dir}" /> </target> <!-- ========================================================== --> <!-- コンパイル --> <!-- ========================================================== --> <target name="compile"> <msbuild verbosity="Minimal"> <property name="Configuration" value="Release" /> <property name="OutputPath" value="..\${bin.dir}"/> </msbuild> </target> <!-- ========================================================== --> <!-- Webアプリケーションをデプロイ --> <!-- ========================================================== --> <target name="deploy"> <delete dir="${iis.dir}" /> <copy todir="${iis.dir}"> <fileset basedir="${bin.dir}/_PublishedWebsites/${project.name}"> <include name="**/*" /> </fileset> </copy> </target> <!-- ========================================================== --> <!-- App.configの更新 --> <!-- ========================================================== --> <target name="update.App.config"> <regex pattern="^hudson-BrowserType=(?'BrowserType'.*),.*$" input="${environment::get-variable('BUILD_TAG')}" /> <echo message="BrowserType=${BrowserType}" /> <copy file="${project.name}Test/${BrowserType}-App.config" tofile="${bin.dir}/${project.name}Test.dll.config" overwrite="true" /> </target> <!-- ========================================================== --> <!-- ユニットテスト実行 --> <!-- ========================================================== --> <target name="unitTest"> <!-- SeleniumServer起動 --> <exec program="cmd"> <arg value="/C" /> <arg value="start java -jar ${project.name}Test/selenium-server.jar" /> </exec> <!-- ユニットテスト実行 --> <nunit2 failonerror="false" verbose="true"> <formatter usefile="true" type="Xml" extension=".xml" outputdir="${report.dir}"/> <test> <assemblies basedir="${bin.dir}"> <include name="*Test.dll"/> </assemblies> </test> </nunit2> <!-- SeleniumServer停止 --> <exec program="cmd"> <arg value="/C" /> <arg value="start ${stop.seleniumServer.url}" /> </exec> </target> </project>
■coverage.build
NCoverに付属しているAntタスクを使用しています。
NCoverのAntタスクでカバレッジの取得からHTMLレポートの生成までをしています。
「IIS再起動してNCoverの実行を止めてね!」って、ヘルプに書いてあったので、
NCover実行後にIISを再起動してカバレッジ採取を止めています。
<?xml version="1.0" encoding="utf-8"?> <project name="UnitTestCoverage" default="coverage" basedir="."> <!-- NCoverのAntタスクを読み込む --> <loadtasks assembly="NCover.NAntTasks.dll"/> <!-- ========================================================== --> <!-- 定義値 --> <!-- ========================================================== --> <property name="coverage.dir" value="coverage"/> <property name="ncover.home" value="C:/Program Files/NCover"/> <property name="nunit.home" value="C:/Program Files/NUnit 2.5.2/bin/net-2.0"/> <property name="coverage.target" value="${project.name}Test.dll"/> <property name="coverage.out" value="coverage.xml"/> <!-- ========================================================== --> <!-- NAntタスク実行順序 --> <!-- ========================================================== --> <target name="coverage"> <call target="clean" /> <call target="ncover" /> </target> <!-- ========================================================== --> <!-- ディレクトリをクリア --> <!-- ========================================================== --> <target name="clean"> <delete dir="${coverage.dir}" /> <mkdir dir="${coverage.dir}" /> </target> <!-- ========================================================== --> <!-- NCover実行 --> <!-- ========================================================== --> <target name="ncover"> <!-- SeleniumServer起動 --> <exec program="cmd"> <arg value="/C" /> <arg value="start java -jar ${project.name}Test/selenium-server.jar" /> </exec> <!-- NCover実行 --> <ncover program="${ncover.home}/NCover.Console.exe" testRunnerExe="${nunit.home}/nunit-console.exe" testRunnerArgs="${bin.dir}/${coverage.target}" htmlReportDir="${coverage.dir}" profileIIS="true" /> <!-- SeleniumServer停止 --> <exec program="cmd"> <arg value="/C" /> <arg value="start ${stop.seleniumServer.url}" /> </exec> <!-- IIS再起動(カバレッジ採取を止める) --> <exec program="iisreset" /> <!-- テスト結果XMLをコピー --> <copy file="TestResult.xml" tofile="${report.dir}/TestResult.xml" /> </target> </project>