BT

NUnit のユニットテスト記述を簡素化する Action Attribute

| 作者: Harry Brumleve フォローする 1 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2012年3月11日. 推定読書時間: 4 分 |

原文(投稿日:2012/03/05)へのリンク

NUnit の最新リリース に導入された Action Attribute はスイートやテスト,さらにテストケースの全体にわたってテストアクションを統括管理する機能だ。テストプロジェクトに含まれるクラスやインターフェース,メソッド,あるいはアセンブリに対して,テストアクションをカプセル化した Action Attribute を適用することによって setup と teardown,その他テストのサイドエフェクトの実行をアレンジできる。

所定のテストが実行されると,関連付けられたすべての Action Attribute が定義順に2回ずつコールされる。1度目は BeforeTest イベントであり,2度目は AfterTest イベントだ。この実行パターンによって開発者は,setup と teardown 間のテストの振る舞いを個別にコントロールすることが可能だ。

Action Attribute を利用する には,開発者はまず最初に新しい属性を定義する。属性は ITestAction を実装した Attribute 継承クラスとするか,あるいは TestActionAttribute を直接継承するか,どちらかの形式を取らなければならない。

以下のコードでは,ITestAction インターフェースを実装して Action Attribute を実装する方法を示している。

これと同じことを TestActionAttribute を継承して行うと,次のようなコードになる。

作成した Action Attribute は通常の .NET 属性として,テストプロジェクト内の任意のメソッド,クラス,インターフェース,あるいはアセンブリに適用することができる。

NUnit の出力には,Action Attribute の構成が反映される。

***** BankingTests.AccountTest.DepositFunds
Before via inheritance Case: AccountTest, from DepositFunds.
After via inheritance Case: AccountTest, from DepositFunds.
***** BankingTests.AccountTest.TransferFunds
Before via Interface Case: AccountTest, from TransferFunds.
After via Interface Case: AccountTest, from TransferFunds.

ひとつのターゲットに対して,複数の Action Attribute の適用が可能だ。同じカッコ内に定義された Action Attribute は左から右に,別々に定義された場合は下から上の順で実行される。

このように Action Attribute を組み合わせれば,それぞれが同じテスト内で実行される。

***** BankingTests.AccountTest.TransferWithInsufficientFunds
Before via Interface Case: AccountTest, from TransferWithInsufficientFunds.
Before via inheritance Case: AccountTest, from TransferWithInsufficientFunds.
After via inheritance Case: AccountTest, from TransferWithInsufficientFunds.
After via Interface Case: AccountTest, from TransferWithInsufficientFunds.

Action Attribute はユニットテストで定義した機能を,さまざまな方法で再利用するための柔軟性を提供するものだ。ユニットテストのセットアップと動作を構成することにより,平均レベルのテスト担当者による生産性とテスト効果は劇的に増大する。ただしその一方で,テストを保守するこれらの開発者から重要なテストロジックを隠蔽することにもなるので,不用意に利用すると小回りの利かない,階層化したユニットテストを作り上げる可能性もある。

Action Attribute 以外に,今回の NUnit では合計で 90 にのぼるバグフィックスと,フレームワークに対するいくつかの修正が実施されている。その他として,NUnit および .NET の旧バージョンに対するサポートが廃止された。NUnit では 2.6 のリリース時点で,最初のバージョンで導入した定義規則のサポートを廃止している。また別途ダウンロードの必要なくサポートされるのは,.NET 2.0 以降のみに限定されている。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT