| NUnit | |
|---|---|
Windows 上のNUnit 2.4.6 GUI | |
| 原作者 | チャーリー・プール、ジェームズ・ニューカーク、アレクセイ・ヴォロンツォフ、マイケル・トゥー、フィリップ・クレイグ、ロブ・プラウス、シモーネ・ブソーリ、ニール・コルヴィン |
| 開発者 | NUnit プロジェクト、.NET Foundation |
| 安定版リリース | 4.4.0 / 2025年8月10日 (2025-08-10) |
| リポジトリ | github.com |
| 書かれた | C# |
| オペレーティング·システム | .NET、.NET Framework、Mono |
| タイプ | ユニットテストツール |
| ライセンス | 3.0 はMIT ライセンス、 2.x はBSD スタイル(修正zlib ライセンス) |
| Webサイト | www.nunit.org |
NUnitは、 .NET、.NET Framework、Mono用のオープンソースのユニットテストフレームワークです。Javaの世界におけるJUnitと同じ目的を果たし、xUnitファミリーの1つです。
特徴
- テストは、コンソール ランナーから実行することも、Visual Studio 内のテスト アダプター[ 1 ]を介して実行することも、サードパーティのランナーを介して実行することもできます。
- テストは並列に実行することができます。[ 2 ]
- データ駆動型テストを強力にサポートします。[ 3 ]
- .NET Core、[ 4 ] Xamarin Mobile、[ 5 ] Compact Framework [ 6 ] Silverlight [ 7 ]など複数のプラットフォームをサポートしています。
- すべてのテストケースは、選択的に実行できるように1つ以上のカテゴリに追加できます。[ 8 ]
NUnitは、テストのバッチ実行に使用されるコンソールランナー(nunit3-console.exe)を提供します。コンソールランナーはNUnitテストエンジンを介して動作し、テストの読み込み、探索、実行機能を提供します。テストを別のプロセスで実行する場合、エンジンはnunit-agentプログラムを使用してテストを実行します。
NUnitLite ランナーは、よりシンプルなランナーの方が適している状況で使用できます。これにより、開発者は自己実行型テストを作成できます。
アサーション
NUnitは、クラスの静的メソッドとして豊富なアサーションAssertセットを提供しています。アサーションが失敗した場合、メソッド呼び出しは返されず、エラーが報告されます。テストに複数のアサーションが含まれている場合、失敗したアサーションに続くアサーションは実行されません。そのため、通常はテストごとに1つのアサーションを使用するのが最適です。
Nunit 3.x は複数のアサーションをサポートしています。
[テスト] public void ComplexNumberTest () { ComplexNumber result = SomeCalculation ();Assert.Multiple (() = > { Assert.AreEqual ( 5.2 , result.RealPart , "実部" ) ; Assert.AreEqual ( 3.9 , result.ImaginaryPart , "虚部" ) ; }) ; }クラシック
NUnit 2.4より前は、Assertそれぞれのアサーションごとにクラスの個別のメソッドが使用されていました。これは多くのユーザーに好まれているため、NUnitでも引き続きサポートされています。
各アサートメソッドは、メッセージなし、単純なテキストメッセージ付き、またはメッセージと引数付きで呼び出されます。最後のケースでは、メッセージは指定されたテキストと引数に基づいてフォーマットされます。
// 等価性アサートAssert.AreEqual ( object expected , object actual ) ; Assert.AreEqual ( object expected , object actual , string message , params object [ ] parms ) ;Assert.AreNotEqual (オブジェクト期待値、オブジェクト実際値); Assert.AreNotEqual (オブジェクト期待値、オブジェクト実際値、文字列メッセージ、パラメータオブジェクト[ ]パラメータ) ;// 同一性アサートAssert.AreSame ( object expected , object actual ) ; Assert.AreSame ( object expected , object actual , string message , params object [ ] parms ) ;Assert.AreNotSame (オブジェクト期待値、オブジェクト実際値); Assert.AreNotSame (オブジェクト期待値、オブジェクト実際値、文字列メッセージ、パラメータオブジェクト[ ]パラメータ) ;// 条件アサート// (簡潔にするために、メッセージ シグネチャを持つメソッドは省略されています。) Assert . IsTrue ( bool condition ); Assert . IsFalse ( bool condition );Assert . IsNull (オブジェクトanObject ); Assert . IsNotNull (オブジェクトanObject );アサートします。IsNaN ( double aDouble ) 。Assert.IsEmpty (文字列aString ) ; Assert.IsNotEmpty (文字列aString ) ;Assert.IsEmpty ( ICollectionコレクション) ; Assert.IsNotEmpty ( ICollectionコレクション) ;制約ベース
NUnit 2.4以降、新しい制約ベースモデルが導入されました。このアプローチでは、Assertすべてのアサーションに対してクラスの単一のメソッドを使用し、Constraint実行するテストを指定するオブジェクトを渡します。この制約ベースモデルは現在、NUnitの内部ですべてのアサーションに使用されています。従来のアプローチのメソッドは、この新しいモデルに基づいて再実装されています。
例
NUnitテストフィクスチャの例:
NUnit.Frameworkを使用します。[TestFixture] public class ExampleTestOfNUnit { [Test] public void TestMultiplication () { Assert . AreEqual ( 4 , 2 * 2 , "Multiplication" ); // 同様に、バージョン 2.4 以降の NUnit では、制約オブジェクトに基づく新しい、より直感的なアサーション構文が提供されています// [http://www.nunit.org/index.php?p=constraintModel&r=2.4.7]: Assert . That ( 2 * 2 , Is . EqualTo ( 4 ), "Multiplication 制約ベース" ); } }// 次の例は、同じ例外テストを記述するさまざまな方法を示しています。[TestFixture] public class AssertThrowsTests { [ Test] public void Tests () { // .NET 1.x Assert.Throws ( typeof ( ArgumentException ) , new TestDelegate ( MethodThatThrows )); // .NET 2.0 Assert.Throws < ArgumentException > ( MethodThatThrows ); Assert.Throws < ArgumentException > ( delegate { throw new ArgumentException ( ) ; } ) ;// C# 3.0 の Assert . Throws < ArgumentException > ( () => { throw new ArgumentException (); }); } void MethodThatThrows () { throw new ArgumentException (); } }// この例では、戻り値を使用して例外の追加検証を実行します。[ TestFixture] public class UsingReturnValue { [ Test ] public void TestException () { MyException ex = Assert.Throws < MyException > ( delegate { throw new MyException ( " message " , 42 ) ; } ) ; Assert.That ( ex.Message , Is.EqualTo ( " message " ) ) ; Assert.That ( ex.MyParam , Is.EqualTo ( 42 ) ) ; } }// この例では、制約を含むオーバーロードを使用して同じことを行います。[TestFixture] public class UsingConstraint { [Test] public void TestException () { Assert . Throws ( Is . Typeof < MyException > () . And . Message . EqualTo ( "message" ) . And . Property ( "MyParam" ). EqualTo ( 42 )、delegate { throw new MyException ( "message" , 42 ); }); } }NUnit フレームワークは、リフレクションExampleTestOfNUnit.TestMultiplication()によってメソッドを自動的に検出します。
拡張機能
FireBenchmarksは、ユニットテストの実行時間を記録し、チャートと履歴追跡機能を備えたXML、CSV、XHTML形式のパフォーマンスレポートを生成できるアドインです。主な目的は、アジャイル手法を採用する開発者やチームが、パフォーマンス指標と分析をユニットテスト環境に統合し、アルゴリズムの複雑さやシステムリソースの負荷の観点からソフトウェアシステムの進化を容易に制御・監視できるようにすることです。
NUnit.Formsは、NUnitコアフレームワークの拡張版であり、オープンソースです。特に、 Windowsフォームのユーザーインターフェース要素のテストを処理できるようにNUnitを拡張することに重点を置いています。2013年1月現在、NUnit.Formsはアルファ版であり、2006年5月以降はバージョンがリリースされていません。
NUnit.ASPは、コアNUnitフレームワークの拡張版であり、現在は廃止されています[ 9 ]。オープンソースです。NUnitを拡張し、ASP.NETのユーザーインターフェース要素のテストを処理できるようにすることに特化しています。
参照
- テスト自動化
- .NET プログラミング言語のユニット テスト フレームワークのリスト(xUnit に基づくものを示す列を含む)
- XUnit.net
- ジュニット
参考文献
- ^ 「NUnit 3 テスト アダプター」。
- ^「並列化可能な属性」。GitHub 。
- ^ "TestCaseData" . GitHub .
- ^ Prouse, Rob (2015年11月4日). 「NUnit 3を使用した.NET Coreのテスト」 .
- ^ Prouse, Rob (2015-03-25). 「AndroidおよびiOS向けNUnit 3.0テストランナー」 .
- ^ 「Compact Framework 用の NUnit バージョン 3」。
- ^ 「SilverLight 5.0 用の NUnit バージョン 3」。
- ^ "CategoryAttribute" . GitHub . 2015年12月15日閲覧。
- ^ 「NUnit.ASPウェブサイトのメインページ」 . SourceForge . 2008年4月15日閲覧。
参考文献
- ハント、アンドリュー、トーマス、デイヴィッド(2007年)『NUnitによるC#実践的ユニットテスト』第2版、 The Pragmatic Bookshelf(ローリー)、2007年。ISBN 0-9776166-7-3。
- ニューカーク、ジム、ヴォロンツォフ、アレクセイ (2004). 『Microsoft .NETにおけるテスト駆動開発』 Microsoft Press (Redmond), 2004. ISBN 0-7356-1948-4。
- ハミルトン、ビル (2004). NUnit ポケットリファレンス. O'Reilly (ケンブリッジ), 2004. ISBN 0-596-00739-6。
外部リンク
- 公式サイト
- GitHubサイト
- Launchpad サイト(メンテナンス終了)
- NUnitとTest-driven.NETによるテスト駆動開発Archived 2008-05-15 at the Wayback Machine video demo
- NUnit.Forms ホームページ
- NUnitAspホームページ
- 記事「テスト駆動開発によるアプリケーション品質の向上」では、 Nunitを使用した具体的な例とともにTDDの概要を説明します。
- nunitテストを並列実行できるオープンソースツール。 2013年11月18日にWayback Machineにアーカイブ。
- チャーリー・プール、共同開発者
- 共同開発者、ロブ・プラウズ
- Simone Busoli、共同開発者