ASP.NET MVC Framework | страница 19




Листинг 2.3. Модифицированный файл Default.aspx.designer.cs

>namespace WebFormsMvc {

>public partial class _Default {

>  public global::System.Web.UI.HtmlControls.HtmlForm form1;

>    public global::System.Web.UI.WebControls.Label lblResponse;

>    public global::System.Web.UI.WebControls.TextBox txtFirstName;

>    public global::System.Web.UI.WebControls.TextBox txtLastName;

>    public global::System.Web.UI.WebControls.Button btnSave;

>  }

>}


После этого можно создать отдельный класс-контроллер для страницы Default.aspx, код которого приведен в листинге 2.4, и обращаться к нему из обработчиков событий страницы, как это показано в листинге 2.5. Обработчики событий страницы, в данном случае, выполняют только утилитарную роль привязки вызовов методов контроллера к событиям страницы.


Листинг 2.4. Файл DefaultPageControNer.cs

>namespace WebFormsMvc.Controllers {

>  public class DefaultPageController {

>    public DefaultPageController(_Default pg) { page = pg; }

>    public void ButtonSaveClick()

>    {

>      page.lblResponse.Text = page.txtFirstName.Text + " "

>               + page.txtLastName.Text;

>    }

>    public void PageLoad()

>    {

>      if (!page.IsPostBack)

>      {

>        page.txtFirstName.Text = "Иван";

>        page.txtLastName.Text = "Кузнецов";

>      }

>    }

>  }

>}


Листинг 2.5. Модифицированный файл Default.aspx.cs

>using System;

>using WebFormsMvc.Controllers;

>namespace WebFormsMvc {

>public partial class _Default:System.Web.UI.Page {

>  protected DefaultPageController controller;

>  protected void btnSave_Click(object sender, EventArgs e)

>  {

>    controller.ButtonSaveClick();

>  }

>  protected void Page_Load(object sender, EventArgs e)

>  {

>    controller = new DefaultPageController(this);

>    controller.PageLoad();

>  }

>}


Теперь, когда логика страницы вынесена в отдельную сущность — контроллер, есть возможность тестирования логики в отрыве от представления. Для этого достаточно создать экземпляр класса контроллера и передать ему проинициализированный объект модели. Поскольку в качестве модели выступает ASPX-страница, необходимо создать экземпляр класса страницы и про-инициализировать значащие элементы управления, поскольку при тестировании не будут задействованы внутренние механизмы создания экземпляров страниц.

В листинге 2.6 приведен простейший unit-тест для проверки обработчика события загрузки страницы.


Листинг 2.6. Unit-тест для события загрузки страницы

>[TestMethod]

>public void TestPageLoad()


>  _Default page = new _Default();