特集

Vista時代のVisual C++の流儀(後編)

STL/CLRによるDocument/Viewアーキテクチャ

επιστημη(えぴすてーめー)
2007/05/11
Page1 Page2 Page3 Page4

おまけ:NUnitの活用

 本特集では、C++/CLIとC#とのコンビネーションでDocument/Viewアーキテクチャを実現し、MFCで書かれたアプリケーションを.NET化する方策について解説してきました。

 Document/Viewアーキテクチャをベースにアプリケーションを構築することでアプリケーションの実体とユーザー・インターフェイスとをきっちり分離できます。そしてそのことは効果的な単体テストを容易にします。つまり、Viewと分離されたDocumentはユーザー・インターフェイスを伴うことなく動作させられるので、たくさんのテスト項目を一気に実行/検証できます。

 ここではNUnitを使って、今回実装したDocumentであるStringStackDocumentをテストしてみましょう。

 NUnitのWebページからインストール・パッケージ「NUnit-2.4.0-r2-net-2.0.msi」(執筆時点の最新版)をダウンロードし、適当なディレクトリにインストールします。そしてその中に含まれる「NUnit-Gui」(=binフォルダにあるnunit-gui.exe)を、VS 2005(Express Editionも同様)のメニュー・バーの「ツール]−[外部ツール]に設定します。

[外部ツール]へのNUnitの設定
[タイトル]は分かりやすい名前(この例では「NUnit 2.4」)を付ける。[コマンド]にはインストールしたNUnit-Guiのパス、[引数]には「$(TargetPath)」を、[初期ディレクトリ]には「$(TargetDir)」を設定する。

 StringStackDocumentをテストするクラス・ライブラリのプロジェクトを作ります。プロジェクトの参照設定に「nunit.framework」(.DLLファイル)と、テスト対象であるStringStackDocumentのアセンブリ(.DLLファイル)を追加します。

 あとはNUnitの書式に従ってテスト・コードを書きます。本稿の場合は次のようになります。

using System;
using namespace NUnit::Framework;
using namespace NUnit::Framework::SyntaxHelpers;
using namespace dotNet;

[TestFixture]
public ref class DocumentTest {
private:
  StringStackDocument^ document;
  int updateCount;
public:

  [TestFixtureSetUp]
  void Fixture初期化() {
    document = gcnew StringStackDocument();
    document->AddObserver(
      gcnew EventHandler(this, &DocumentTest::ハンドラ));
  }

  [SetUp]
  void テストごとの初期化() {
    document->Clear();
    updateCount = 0;
  }

  [TearDown]
  void テストごとの後始末() {
  }

  // handler
  void ハンドラ(Object^ sender, EventArgs^ e) {
    ++updateCount;
  }

  [Test]
  void Push3回_ハンドラは正しく呼ばれるか() {
    document->Push(L"りんご");
    document->Push(L"みかん");
    document->Push(L"ぶどう");
    Assert::That(updateCount, Is::EqualTo(3));
  }

  [Test]
  void Push3回の後Clear_空になるか() {
    document->Push(L"りんご");
    document->Push(L"みかん");
    document->Push(L"ぶどう");
    document->Clear();
    Assert::That(document->Empty());
    Assert::That(updateCount, Is::EqualTo(4));
  }

  ……省略……
};
StringStackDocumentをテストするテスト・コード(C#)

 このテスト・コードをビルドした後は、メニュー・バーから[ツール]−[NUnit 2.4](タイトルで設定した名前になる)を起動するだけ。

StringStackDocumentに対するテストが実行されたNUnitのGUI画面
左のツリーで緑色のチェック・マークが付いている項目は、そのテストがパスしたという意味。

 このように.NETでもDocument/Viewアーキテクチャを採用することで、テストが行いやすくなり、品質が向上するというメリットがあります。End of Article

 

 INDEX
  [特集]
  Vista時代のVisual C++の流儀(前編)
  Vista到来。既存C/C++資産の.NET化を始めよう!
    1.Vista時代にC/C++はもはやお払い箱なのか?
    2.C/C++資産をどこまで生かせる?
    3.ネイティブ・オブジェクトをマネージ・コードでくるむ
    4.文字コード変換
 
  Vista時代のVisual C++の流儀(中編)
  MFCから.NETへの実践的移行計画
    1.C++/CLIによるWindowsフォーム・アプリケーション
    2.言語をまたいだDocument/Viewアーキテクチャ
    3..NET移行前のMFCサンプル・アプリケーション
    4.MFCのDocument/Viewアーキテクチャの.NET化
    5.MFCで書かれたDocumentを.NET化する2つの方法
 
  Vista時代のVisual C++の流儀(後編)
  STL/CLRによるDocument/Viewアーキテクチャ
    1.STL/CLRとは
    2.STL/CLRの特徴
    3.Visual Studio 2005で試す
  4.おまけ:NUnitの活用


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間