連載:VSTSの単体テスト機能は本当に使えるのか?第1回 Team Systemのテスト機能の実際太陽システム株式会社 中西 庸文(Microsoft MVP 2006 - Solutions Architect) 2006/08/09 |
|
Visual Studio 2005 Team System(以下、VSTS)のエディションのうち、以下の2つには、コード・テスト・ツール(=単体テストやコード・カバレッジ)が導入されている。
- 開発担当者向けのTeam Edition for Software Developers(以下、TE for Developer)
- テスト担当者向けのTeam Edition for Software Testers(以下、TE for Tester)
さらに、コード・テスト・ツールおよびTE for Tester特有のテスト・ツール(=Webテストやロード・テスト、汎用テストなど)はVisual Studio 2005(以下、VS 2005)のIDEに統合され、ツール間の連携やツールの利用者間の連携がスムーズに行えるようになっている(VSTSの各エディションの比較はVisual Studio 2005 機能比較を参考にされたい)。これは、ソフトウェア品質の問題に対処すべくしてマイクロソフトが出した成果であろう。
VSTS機能構成図 |
本連載では、デベロッパーの観点からVSTSの単体テスト機能は本当に使えるのかどうかを検証し、もし使えるのであれば、それを使いこなすための方法を説明していく。連載初回である今回はVSTSのコード・テスト・ツールがどのようなものなのか、実際にどのように利用すればよいのかについて概観し、最後にTE for Tester特有のテスト・ツールについても簡単に紹介する。
そもそも開発者のためのテスティング(Developer Testing)という観点から見た場合、VSTSのコード・テスト・ツールはプログラマーにとって本当に使いやすく、その作業効率を高めるものなのであろうか。コード・テスト・ツールの利用例を通してそれを見ていこう。
VSTSのコード・テスト・ツール
冒頭で述べたように、VSTSのコード・テスト・ツールには、単体テストおよびコード・カバレッジが含まれており、開発担当者向けのTE for Developerとテスト担当者向けのTE for Testerの双方から利用することができる。つまりマイクロソフトがそれだけ単体テストに重点を置いているということであろう。
ソフトウェア開発プロジェクトにはさまざまな種類のテストが必要になるが、単体テストの重要性は特に高い。なぜなら単体テストが動作しないということは、コードが意図したとおりに動作していないということである。このような状態では、ほかのどのような形式のテストも意味をなさない。つまり、単体テストはすべてのテストの出発点となるのである。
■自動化された単体テスト
“Developer Test”という言葉を耳にしたことがあるだろうか。Developer Testとは、素早く動作し、自動化されており、小さな特定のコードの機能が正しく動作することを検証するために、プログラマーによってコードとして記述されるテストのことである。
つまりDeveloper Testとは、NUnitやJUnitに代表される「xUnitテスティング・フレームワーク」によって提供される自動化された単体テストのことを指す。もちろんVSTSのコード・テスト・ツールの単体テストも、xUnitの流れをくむ「VSTS Unit Testing Framework」によって提供される「自動化された単体テスト」である。
ここで、自動化された単体テストとはどのようなものなのかを簡単に説明しておこう。
xUnitは単体テストの記述方法と実行方法の共通化を実現している。つまりテスティング・フレームワークによって定められた記述方法に従って単体テスト・クラスを記述すれば、GUIアプリケーションやコンソール・アプリケーションとして提供されるテスト・ランナー(=単体テスト実行ツール)によって単体テストの検出、実行、テスト結果のレポートが自動的に行われるのだ。VSTSでは、VSTSの単体テスト・エンジンがテスト・ランナーとなり、VS 2005のIDE上から単体テストを実行することができる。
それでは、四則演算クラスの作成を例に取って、VSTSにおける自動化された単体テストの作成から実施までの流れを簡単に紹介していこう。
●1. ソリューションの作成
まずVS 2005で空のソリューションを作成する。これには、VS 2005の[新しいプロジェクトの作成]ダイアログで[その他のプロジェクトの種類]−[Visual Studio ソリューション]を選択し、右側のテンプレートの一覧から「空のソリューション」を選択してソリューションを新規作成する。ソリューション名は何でもよいが、ここでは「UnitTestSample」とした(また作成場所は「C:\atmarkIT\fdotnet」にした)。
「空のソリューション」の作成 |
VS 2005のメニュー・バーから[ファイル]−[新規作成]−[プロジェクト]を選択すると、このような[新しいプロジェクト]ダイアログが表示される。 |
●2. テスト対象プロジェクトの追加
次に、VS 2005の[新しいプロジェクトの追加]ダイアログで、左側のプロジェクトの種類から「Visual C#」を選択し、右側のテンプレートから「クラス ライブラリ」を選択して、ソリューションにテスト対象とするプロジェクトを追加する。本稿では「UnitTestSample.Core」という名前のプロジェクトを追加した。なお本稿では使用言語としてすべてC#を用いている。
ソリューションへのテスト対象プロジェクトの追加 |
VS 2005のメニュー・バーから[ファイル]−[追加]−[新しいプロジェクト]を選択すると、このような[新しいプロジェクトの追加]ダイアログが表示される。 |
●3. テスト・プロジェクトの自動生成
続いては、ソリューション・エクスプローラで、先ほど追加したテスト対象プロジェクト中に自動生成されている「Class1.cs」の名前を「Calculator.cs」に変更する(その際、リファクタリング機能が働き、クラス名も「Class1」から「Calculator」に変更できる)。
そして、テスト対象となるメソッドのスタブ(本稿の場合はint型で「0」を返すだけのAddメソッド)を作成し、作成したメソッド上で右クリックすると表示されるコンテキスト・メニューから[単体テストの作成]を実行する。
単体テストの作成 |
VS 2005のコード・エディタでメソッドを右クリックしてコンテキスト・メニューを表示し、そこから[単体テストの作成]を選択する。これにより、単体テストを作成するためのダイアログが表示される。 |
上記の作業により次のようなダイアログが表示される。ここで、単体テストを作成したいメソッドを選択して[OK]ボタンをクリックする。本稿の例では、先ほど実装したAddメソッドを選択した。
単体テストの作成(メソッドの選択) |
[単体テストの作成]ダイアログで単体テストを生成したいメソッドにチェックを入れる。 |
次に[新しいテスト プロジェクト]ダイアログが表示されるので、生成するテスト・プロジェクトの名前(本稿の例では「UnitTestSample.Tests」)を入力する。
新しいテスト・プロジェクトの名前の入力 |
[新しいテスト プロジェクト]ダイアログで単体テスト用プロジェクトの名前を入力する。 |
[新しいテスト プロジェクト]ダイアログの[作成]ボタンをクリックすると、次の画面のように、「Microsoft.VisualStudio.QualityTools.UnitTestFramework」アセンブリ(=VSTS Unit Testing Framework)とテスト対象プロジェクトへの参照設定が追加された状態のテスト・プロジェクトとテスト・クラスが自動生成される。
次に、開発者の意図を表現するように、自動生成されたテスト・クラスのテスト・メソッド(AddTestメソッド)を修正する。
INDEX | ||
VSTSの単体テスト機能は本当に使えるのか? | ||
第1回 Team Systemのテスト機能の実際 | ||
1.自動化された単体テスト(1) | ||
2.自動化された単体テスト(2) | ||
3.コード・カバレッジ | ||
4.TE for Tester特有のテスト・ツール | ||
「VSTSの単体テスト機能は本当に使えるのか?」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|