在ASP.NET MVC中進行TDD開發

作者: 麒麟  來源: 博客園  發布時間: 2010-08-02 14:04  閱讀: 1057 次  推薦: 1   原文鏈接   [收藏]  

  TDD介紹

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

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

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

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

hkkk

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

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

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

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

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

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

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

  下面我們看下真正的TDD循環,如下圖所示:

ppp

  TDD循環:

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

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

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

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

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

  ASP.NET MVC中進行TDD開發

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

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

kkk

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

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

 
using NUnit.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循環的的第二步。

nnn

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

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

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

kkkkk

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

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

  參考:Test-Drive ASP.NET MVC

1
0
 
標簽:ASP.NET MVC TDD
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()