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();