ツール
まず、次のツールが必要です。
- MvcContrib-単体テストの分野を含む、ASP.NET MVCの追加機能を備えたライブラリ。
- RhinoMocks-テストを簡素化する偽(モック)オブジェクトを作成するためのライブラリ。
- NUnitは、独自の属性とツールのセットを備えた単体テスト環境です。
設置
NUnitをインストールしてから、nunit.framework(GACから)、Rhino.Mocks、およびMvcContrib.TestHelperをプロジェクトに追加します。
環境は、ルートの単体テストを作成する準備ができています。
テスト
ルートの単体テストの例を示すために、そのようなルートのペアを定義しましょう:
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
routes.MapRoute(
"Product" ,
"Product/{id}" ,
new { controller = "Product" , action = "GetById" }
);
routes.MapRoute( "ProductList" ,
"ProductList/{year}" ,
new { controller = "Product" , action = "List" },
new { year = new YearConstraint() }
);
routes.MapRoute(
"Default" ,
"{controller}/{action}/{id}" ,
new { controller = "Home" , action = "Index" , id = "" }
);
* This source code was highlighted with Source Code Highlighter .
ProductListルートに注意してください。 スキップするコードであるYearConstraint制限が含まれていますが、この制限はパラメーターyearが1900から2100の範囲に属しているかどうかをチェックするだけです。
テストのために、次のクラスを作成します。
namespace Routing
{
using MvcContrib.TestHelper;
using NUnit.Framework;
using Routing.Controllers;
using System.Web.Routing;
using Rhino.Mocks;
using System.Web;
[TestFixture]
public class TestRoutes
{
[TestFixtureSetUp]
public void SetUp()
{
MvcApplication.RegisterRoutes(RouteTable.Routes);
}
[TestFixtureTearDown]
public void TearDown()
{
RouteTable.Routes.Clear();
}
}
}
* This source code was highlighted with Source Code Highlighter .
NUnitを以前に使用したことがある人にとっては、属性はおなじみのものであり、残りはその目的について少し説明します。
- TestFixture-テストでクラスを定義します。
- TestFixtureSetUp-テストを実行する前に実行する必要があるコードでメソッドを定義します。
- TestFixtureTearDown-テストの実行後に実行する必要があるコードを持つメソッドを定義します。
[Test]
public void TestSimpleRoute()
{
"~/" .Route().ShouldMapTo<HomeController>(x => x.Index());
}
* This source code was highlighted with Source Code Highlighter .
ここでは、MvcContribライブラリを拡張する方法を使用して、プロジェクトのルートへのリクエストの操作性を確認します。これは、決定したルートに従って、デフォルトルートを使用してルーティングする必要があります。 このルートは、デフォルトでASP.NET MVCアプリケーションで作成されます。 プロジェクトルートへのリクエストは、デフォルトでHomeControllerのIndexアクションにルーティングされる必要があります。
プロジェクトをコンパイルし、NUnitを実行します。 テストとしてプロジェクトとしてアセンブリを選択したら、[実行]をクリックしてテストを実行します。 下の写真の結果:
テストに合格しました。 残りのテストを追加します。
[Test]
public void TestProduct()
{
"~/Product/750" .Route().ShouldMapTo<ProductController>(x => x.GetById(750));
}
[Test]
public void TestProductListValidYear()
{
"~/ProductList/2009" .Route().ShouldMapTo<ProductController>(x => x. List (2009));
}
[Test]
public void TestProductListInvalidYear()
{
Assert.AreNotEqual( "~/ProductList/1800" .Route().Values[ "controller" ], "Product" );
}
[Test]
public void TestIgnoreAxd()
{
"~/someroutetoigonre.axd" .ShouldBeIgnored();
}
* This source code was highlighted with Source Code Highlighter .
ここには4つのテストがあります。
- TestProduct-製品ルートをテストするように設計されています。
- TestProductListValidYear-正しく指定されたパラメーター年で制限のあるルートをテストするためのテスト。
- TestProductListInvalidYear-誤って指定されたパラメーター年で制限されたルートをテストするためのテスト。
- TestIgnoreAxd-axdリソースへのリクエストを無視するルートをテストするためのテスト。
そして、最後に注意すべきことは、無視ルートをチェックするためのテストをどれだけ簡単に作成するかです。 ShouldBeIgnored拡張メソッドを使用すると、このようなルートのテストを指定できます。 TestIgnoreAxdテストでは、特定のaxdリソースにアクセスする状況を想像しようとしています。これは、指定されたルートに従って無視する必要があります。
NUnitでテストをコンパイルして実行します。
すべてのテストに合格しました。 作業は完了しました。
おわりに
この記事では、ASP.NET MVCでのユニットテストルートの最も単純なテストケースを取り上げました。 MvcContribライブラリに含まれるツールを使用すると、このようなテストを非常に簡単に作成でき、もちろん開発者の作業が楽になります。
プロジェクトでは、おそらくルーティングメカニズムのより詳細な単体テストを作成する必要があります。 MvcContribはこれを支援します。 喜んでプログラム!