2015-10-06 51 views
0

說我有一個控制器,看起來像下面的一個,我從數據庫中獲取一些項目,並將它們添加到分頁列表中。我將如何去編寫一個單元測試呢?我似乎無法找到任何關於此的好材料。ASP MVC單元測試分頁列表

控制器:

public class ErrorController : Controller 
{ 
    public ErrorModel Errors { get; set; } 
    public List<ErrorModel> ErrorList { get; set; } 

    public ActionResult Error(int? page) 
    { 
     string cs = "Data Source=" + "some\\path"; 

     using (SQLiteConnection con = new SQLiteConnection(cs)) 
     { 
      var listOfErrors = new List<ErrorModel>(); 
      string stm = "SELECT * FROM Error WHERE Checked == 'False'"; 
      con.Open(); 

      using (SQLiteCommand cmd = new SQLiteCommand(stm, con)) 
      { 
       using (SQLiteDataReader rdr = cmd.ExecuteReader()) 
       { 
        while (rdr.Read()) 
        { 
         listOfErrors.Add(new ErrorModel 
         { 
          Id = rdr["ID"].ToString(), 
          Type = rdr["Type"].ToString(), 
         }); 
        } 

        rdr.Close(); 
        ErrorList = listOfErrors; 
       } 
      } 

      con.Close(); 
     } 

     // stuff for paging 
     int pageSize = 10; 
     int pageNumber = (page ?? 1); // if there is no page, return page 1 

     return View(ErrorList.ToPagedList(pageNumber, pageSize)); 
    } 

我目前,顯然不充足的單元測試:

[TestClass] 
public class ErrorControllerTest 
{ 
    [TestMethod] 
    public void TestErrorView() 
    { 
     var controller = new ErrorController(); 
     var result = controller.Error(1) as ViewResult; 
     Assert.AreEqual("Error", result.ViewName); 
    } 
} 

任何提示不勝感激。

回答

1

你想要測試什麼?數據庫結果?控制器的行動?

如果你認真對待這個問題,你可能會有更多的運氣來抽象出你的數據檢索/業務邏輯和單元測試,而這些獨立於MVC動作。如果您的業務方法正在做它的工作(根據測試),您不需要測試MVC將返回結果。

public ActionResult Error(int? page) 
{ 
    var model = _privateObjForReturningStuff.GetPage(page); 
    return View(model); 
} 

public class ForReturningStuff 
{ 
    public Model GetPage(int page) 
    { 
     ... gets page stuff 
    } 
} 

[TestClass] 
public class ForReturningStuffTest 
{ 
    [TestMethod] 
    public void GetPage_does_something_I_can_assert() 
    { 
     ... 
    } 
} 

通常,您不會單元測試第三方代碼。

+0

如果您希望爲單元測試提供一些儘可能真實的用例,請嘗試此項目https://odetofood.codeplex.com/。它包含一個應用程序,它支持測試,因此您可以瞭解如何對單元測試控制器和其他位/ bob進行單元測試。 –