2012-02-21 6 views
2

私は、ASP.NETを使って書かれたレガシーエンタープライズアプリケーションを検討しています。コントロールやWebフォームはありません。これは、それがどのように動作するかです:ASP.NET Webformsアプリケーションをテスト可能にするにはどうすればいいですか?

EmployeeList.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="EmployeeList.aspx.cs" Inherits="EmployeeList" %> 

EmployeeList.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Security Check 

    // Load Template, get version 1.4 of active employee list 
    StringBuilder template = GetTemplate("Employee", "ActiveList", "1.4", true); 

    // Get list from database 
    using(SqlDataReader objReader = GetListFromDB()) 
    { 
     while(objReader.Read()) 
     { 
      //fills data 
      TUtils.Replace(template, ROW, "%name%", objReader[0]); 
     } 
    } 

    // return response 
    Response.Write(template.ToString()); 
} 

private StringBuilder GetTemplate(string x, string y, string v, bool z); 
{ 
    // returns template 
} 

private SqlDataReader GetListFromDB() { 
    // returns data reader 
} 

我々はWebフォームを使用していないので、私の質問は、です、このイベント駆動モデルにNUnitを導入する方法はありますか?

また、私たちが検討しているASP.NET MVCや他のパターンに移行するための提案は避けてください。このエンタープライズアプリケーションをテスト可能に変換する方法はありますか?

+0

ここには簡単な答え。テストするすべてのロジックをテスト可能な場所に移動します(これは、MVP/MVCのデザインに移行することを意味します)。たぶん私のポスト - http://madcoderspeak.blogspot.com/2012/02/gui-testing-rehab-can-we-start-saying.htmlあなたが始めることができます。ちょうど精神的にGUIをWebGUIに変換する。 – Gishu

答えて

0

ほとんどのコードはコードビハインドであるため、NUnit/Visual Studioのテストフレームワークでの通常のテスト方法はうまくいくとは思いません。

しかし、考えられるアプローチの1つは、WATIN/SeleniumのようなUIテストフレームワークを使用することです。これにより、さまざまな機能のテストを書くことができます。 私は過去に、基本的にサーバーのポストバックをもたらすすべてのUIアクションのテストケースを記述することで、これまで同様のことを行ってきました。理想的ではないかもしれませんが、テストを自動化することができます。

4

これは絶対に可能です。 ASP.NET WebformsでMVPパターンを実装する方法を調べる必要があります。いくつかのオープンソースの実装がありますが、あなた自身でより小さな専門化を行うことができます。

基本は、ロジックの背後にあるコードをプレゼンタークラスに移動することです。プレゼンタークラスには、インターフェースを実装するページへの参照があります。あなたの場合のトリックは、あなたのテストのPage.Responseオブジェクトをモックすることです。それは単体テストが正しい方法でテストするのが難しい理由です。 PageResponseプロパティには、HttpResponseBaseから派生したオブジェクトが含まれています。これは、テストで擬似すべきベースクラスであり、サンプルでアサーションを行います。あなたはそれから始まり、Session、Requestなどの機能を使ってプレゼンターを拡張することができます。

マークアップがない場合は、おそらくビューコンストラクターにプレゼンターを作成しても構いませんビューへの参照。

明確にするには:aspx.csファイルからコードを取得するのが大きなトリックです。その獣はテスト可能ではありません。プレゼンターのための

サンプルベースクラス:

public class Presenter<T> where T : class, IView 
    { 
     protected readonly T View; 

     protected Presenter(T view, ILogger logger) 
     { 
      View = view; 
     } 

     public virtual void page_PreRender(object sender, EventArgs e) 
     { 
     } 

     public virtual void page_Init(object sender, EventArgs e) 
     { 
     } 

     public virtual void page_Load(object sender, EventArgs eventArgs) 
     { 
     } 

     public HttpContextBase HttpContext { protected get; set; } 

     protected HttpRequestBase Request 
     { 
      get { return HttpContext.Request; } 
     } 
    } 
関連する問題