在ASP.NET MVC中進行TDD開發

來源:互聯網
上載者:User

TDD介紹

TDD是一種開發方法,全稱是Test-Driven development,中文是測試驅動開發。作者是Kent Beck。首先讓我介紹一下三種常見的開發方式:

第一種:先Coding,然後Bug Fix。

第二種:先Coding,然後Unit Test,最後Bug Fix。很顯然用了單元測試的比第一種開發方式要好不少。

三種:就是本文要說的TDD,它的方式和第二種恰恰相反。TDD先設計單元測試,然後再Coding,最後修複Bug。看:

TDD開發過程可以看成:給制自己制定一個目標,然後努力去完成這個目標。下面是這個比喻對應關係。斜杠前面的是TDD,斜杠後面的是完成目標:

1、寫一個測試  /  制定一個目標

2、編譯     / 瞭解完成目標的標準

3、運行測試,結果失敗  /   目標沒有達成

4、修改代碼    /     為了完成目標,不停奮鬥

5、再次運行測試,結果通過  /    目標達成。

這個說明應該比較形象啦。

下面我們看下真正的TDD迴圈,如所示:

TDD迴圈:

第一步:寫測試類別,然後拿去編譯。

第二步:將編譯產生好的dll之類的拿去測試,測試失敗。

第三步:失敗之後,就去修改測試的代碼,直到測試通過。

第四步:測試成功之後,去重構你的代碼,增加代碼的可讀性,但不能改變程式的任何功能。重構代碼之後還需要測試,必須測試成功為止。

這四個步驟之後,在從寫測試類別重新開始其他的功能。

ASP.NET MVC中進行TDD開發

下面用一個在asp.net mvc2 中進行一次簡單的TDD開發實戰。單元測試我使用NUnit。

建立一個你類庫項目命名為Test.Unit。再建一個asp.net mvc2的項目。項目結構如:

首先進行第一步,寫測試確定要實現什麼:我們實現一個資料列表的顯示。

在類庫項目中添加一個nunit.framework引用,然後再設計一個TodoControllerTest類用於測試控制器。

usingNUnit.Framework;
namespaceTest.Unit
{
  [TestFixture]
  public  classTodoControllerTest
   {
        [Test]
        public voidShould_Display_A_List_Of_Todo_Items()
        {

        }

    }
}

這個測試類別用於測試Todo控制器,它需要資料實體。所以我們要在asp.net mvc 項目中添加Model。在Model添加下面實體:

public class Todo{    public static List<Todo> ThingsToBeDone = new List<Todo>    {      new Todo {Title = "Get Milk", Completed = false},      new Todo {Title = "Bring Home Bacon", Completed = false}    };    public bool Completed { get; set; }    public string Title { get; set; }}

我們修改TodoCpmtroller,代碼如下:

[TestFixture]public  class TodoControllerTest{    [Test]    public void Should_Display_A_List_Of_Todo_Items()    {        var viewResult = (ViewResult)new TodoController().Index();        Assert.AreEqual(Todo.ThingsToBeDone, viewResult.ViewData.Model);     }}

測試TodoCpmtroller中的Index方法返回的資料是否與Todo的ThingsToBeDone相同,而此時我們還沒有在MVC項目中添加TodoController類和Index方法。

故我們需要在MVC項目中添加TodoController類,代碼如下:

public class TodoController : Controller{    //    // GET: /Todo/    public ActionResult Index()    {        return View();    }}

我們編譯項目發現沒有錯誤。

使用Nunit進行測試,發現測試不通過,這對應TDD迴圈的的第二步。

因為Index中沒有返回任何的資料,所有才會測試失敗。修改Index方法,代碼如下。

public class TodoController : Controller{    //    // GET: /Todo/    public ActionResult Index()    {        ViewData.Model = Todo.ThingsToBeDone;        return View();    }}

編譯繼續測試,發現測試通過。對應上文的第三步。

這個例子非常簡單,也就用不著去重構代碼,所以TDD迴圈的第四步可以省去。然後接著下一輪的迴圈。

 

總結:本文首先簡單的介紹了一下TDD,隨後在asp.net mvc中進行了實戰。

參考:Test-Drive ASP.NET MVC

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.