Asp.net-mvc-unit-testing

提供:Dev Guides
移動先:案内検索

ASP.NET MVC-ユニットテスト

コンピュータープログラミングでは、ユニットテストはソフトウェアテスト方法であり、これにより、ソースコードの個々のユニットをテストして、使用に適しているかどうかを判断します。 言い換えると、それはソフトウェア開発プロセスであり、ユニットと呼ばれるアプリケーションの最小のテスト可能な部分が適切に動作するように個別に個別に精査されます。

手続き型プログラミングでは、ユニットはモジュール全体でもかまいませんが、より一般的には個々の関数またはプロシージャです。 オブジェクト指向プログラミングでは、ユニットは多くの場合、クラスなどのインターフェイス全体ですが、個別のメソッドでもかまいません。

ユニットテストはしばしば自動化されますが、手動で行うこともできます。

単体テストの目標

単体テストの主な目的は、アプリケーション内のテスト可能なソフトウェアの最小部分を取得し、期待どおりに動作するかどうかを判断することです。 各ユニットは、モジュール間のインターフェースをテストするためにそれらをモジュールに統合する前に別々にテストされます。

単体テストを使用して新しいASP.NET MVCアプリケーションを作成する単体テストの簡単な例を見てみましょう。

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。

新しいプロジェクトダイアログが開きます。

新規プロジェクトダイアログ

  • ステップ2 *-左ペインから、[テンプレート]> [Visual C#]> [Web]を選択します。
  • ステップ3 *-中央のペインで、ASP.NET Webアプリケーションを選択します。
  • ステップ4 *-[名前]フィールドにプロジェクト名「MVCUnitTestingDemo」を入力し、[OK]をクリックして続行します。 ASP.NETプロジェクトの初期コンテンツを設定するよう求める次のダイアログが表示されます。

MVCUnitTestingDemo

  • ステップ5 *-MVCをテンプレートとして選択し、ダイアログの下部にある[ユニットテストの追加]チェックボックスをオンにすることを忘れないでください。 テストプロジェクト名も変更できますが、この例ではデフォルトの名前なので、そのままにしておきます。

Visual Studioでプロジェクトを作成すると、ソリューションエクスプローラーウィンドウに多数のファイルとフォルダーが表示されます。

  • ステップ6 *-ソリューションエクスプローラーに2つのプロジェクトがあることがわかります。 1つはASP.NET Webプロジェクトで、もう1つは単体テストプロジェクトです。

Webプロジェクト

  • ステップ7 *-このアプリケーションを実行すると、次の出力が表示されます。

Webプロジェクトの実行

上記のスクリーンショットに見られるように、ナビゲーションバーには[ホーム]、[バージョン情報]、および[連絡先]ボタンがあります。 [About]を選択すると、次のビューが表示されます。

選択について

[連絡先]を選択すると、次の画面が表示されます。

連絡先の選択

「MVCUnitTestingDemo」プロジェクトを展開すると、Controllersフォルダの下にHomeController.csファイルが表示されます。

HomeController.cs file

HomeControllerには、次のコードに示すように3つのアクションメソッドが含まれています。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCUnitTestingDemo.Controllers {
   public class HomeController : Controller{
      public ActionResult Index(){
         return View();
      }

      public ActionResult About(){
         ViewBag.Message = "Your application description page.";
         return View();
      }

      public ActionResult Contact(){
         ViewBag.Message = "Your contact page.";
         return View();
      }
   }
}
*MVCUnitTestingDemo.Tests* プロジェクトを展開すると、Controllersフォルダーの下にHomeControllerTest.csファイルが表示されます。

MVCUnitTestingDemo.Test

このHomeControllerTestクラスには、次のコードに示す3つのメソッドがあります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using MVCUnitTestingDemo;
using MVCUnitTestingDemo.Controllers;

namespace MVCUnitTestingDemo.Tests.Controllers{
   [TestClass]
   public class HomeControllerTest{

      [TestMethod]
      public void Index(){
        //Arrange
         HomeController controller = new HomeController();
        //Act
         ViewResult result = controller.Index() as ViewResult;
        //Assert
         Assert.IsNotNull(result);
      }

      [TestMethod]
      public void About(){
        //Arrange
         HomeController controller = new HomeController();
        //Act
         ViewResult result = controller.About() as ViewResult;
        //Assert
         Assert.AreEqual("Your application description page.", result.ViewBag.Message);
      }

      [TestMethod]
      public void Contact(){
        //Arrange
         HomeController controller = new HomeController();
        //Act
         ViewResult result = controller.Contact() as ViewResult;
        //Assert
         Assert.IsNotNull(result);
      }
   }
}

これらの3つのメソッドは、Index、About、Contactアクションメソッドが適切に機能しているかどうかをテストします。 これら3つのアクションメソッドをテストするには、[テスト]メニューに移動します。

テストメニュー

[実行]→[すべてのテスト]を選択して、これらのアクションメソッドをテストします。

アクションメソッド

これで、左側にテストエクスプローラーが表示され、すべてのテストに合格したことがわかります。 すべての従業員をリストするアクションメソッドをもう1つ追加しましょう。 最初に、Modelsフォルダーに従業員クラスを追加する必要があります。

以下は、Employeeクラスの実装です。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;

namespace MVCUnitTestingDemo.Models{
   public class Employee{
      public int ID { get; set; }
      public string Name { get; set; }
      public DateTime JoiningDate { get; set; }
      public int Age { get; set; }
   }
}

EmployeeControllerを追加する必要があります。 ソリューションエクスプローラーでコントローラーフォルダーを右クリックし、[追加]→[コントローラー]を選択します。

[足場の追加]ダイアログが表示されます。

足場の追加

[MVC 5 Controller – Empty]オプションを選択し、[Add]ボタンをクリックすると、[Add Controller]ダイアログが表示されます。

名前をEmployeeControllerに設定し、[追加]ボタンをクリックします。

コントローラーの追加EmployeeController

Visual Studioで編集するために開いているControllersフォルダーに新しいC#ファイル「EmployeeController.cs」が表示されます。 次のコードを使用してEmployeeControllerを更新しましょう。

using MVCUnitTestingDemo.Models;
using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCUnitTestingDemo.Controllers {
   public class EmployeeController : Controller{
      [NonAction]

      public List<Employee> GetEmployeeList(){
         return new List<Employee>{
            new Employee{
               ID = 1,
               Name = "Allan",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 23
            },

            new Employee{
               ID = 2,
               Name = "Carson",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 45
            },

            new Employee{
               ID = 3,
               Name = "Carson",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 37
            },

            new Employee{
               ID = 4,
               Name = "Laura",
               JoiningDate = DateTime.Parse(DateTime.Today.ToString()),
               Age = 26
            },
         };
      }

     //GET: Employee
      public ActionResult Index(){
         return View();
      }

      public ActionResult Employees(){
         var employees = from e in GetEmployeeList()
         orderby e.ID
         select e;
         return View(employees);
      }
   }
}

View for Employeesアクションメソッドを追加するには、Employeesアクションを右クリックして、Add View…を選択します

従業員のアクション

ビューのデフォルト名が表示されます。 [テンプレート]ドロップダウンから[リスト]を選択し、モデルクラスのドロップダウンから[従業員]を選択して、[OK]をクリックします。

次に、従業員リストのリンクを追加する必要があります。Views/Sharedフォルダーの下にある_layout.cshtmlファイルを開き、連絡先リンクの下に従業員リストのリンクを追加します。

<li>@Html.ActionLink("Employees List", "Employees", "Employee")</li>

以下は、_layout.cshtmlの完全な実装です。

<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8"/>
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0">
      <title>@ViewBag.Title - My ASP.NET Application</title>
      @Styles.Render("~/Content/css")
      @Scripts.Render("~/bundles/modernizr")
   </head>

   <body>
      <div class = "navbar navbar-inverse navbar-fixed-top">
         <div class = "container">

            <div class = "navbar-header">
               <button type = "button" class = "navbar-toggle" datatoggle =
                  "collapse" data-target = ".navbar-collapse">
                  <span class = "icon-bar"></span>
                  <span class = "icon-bar"></span>
                  <span class = "icon-bar"></span>
               </button>

               @Html.ActionLink("Application name", "Index", "Home", new
                  { area = "" }, new { @class = "navbar-brand" })
            </div>

            <div class = "navbar-collapse collapse">
               <ul class = "nav navbar-nav">
                  <li>@Html.ActionLink("Home", "Index", "Home")</li>
                  <li>@Html.ActionLink("About", "About", "Home")</li>
                  <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                  <li>@Html.ActionLink("Employees List", "Employees", "Employee")</li>
               </ul>

               @Html.Partial("_LoginPartial")
            </div>

         </div>

      </div>

      <div class = "container body-content">
         @RenderBody()
         <hr/>
         <footer>
            <p>© @DateTime.Now.Year - My ASP.NET Application</p>
         </footer>
      </div>

      @Scripts.Render("~/bundles/jquery")
      @Scripts.Render("~/bundles/bootstrap")
      @RenderSection("scripts", required: false)

   </body>
</html>

EmployeeコントローラーからEmployeesアクションメソッドをテストするには、ユニットテストプロジェクトに別のテストメソッドを追加する必要があります。 次は、EmployeesアクションメソッドをテストするEmployeeControllerTestクラスです。

[TestClass]
public class EmployeeControllerTest{
   [TestMethod]
   public void Employees(){
     //Arrange
      EmployeeController controller = new EmployeeController();

     //Act
      ViewResult result = controller.Index() as ViewResult;

     //Assert
      Assert.IsNotNull(result);
   }
}

[テスト]メニューから[実行]→[すべてのテスト]を選択して、これらのアクションメソッドをテストします。

従業員テスト方法

Employeesテストメソッドも合格したことがわかります。 アプリケーションを実行すると、次の出力が表示されます。

image

ナビゲーションバーの[従業員リスト]オプションをクリックすると、従業員のリストが表示されます。

従業員リスト