2014-10-07 122 views
0

我正在使用asp.net mvc,實體框架6和visual studio 2013創建一個新項目。我想直接從一開始創建測試,否則它們永遠不會創建,但我不確定關於何時和測試什麼。第一次創建單元測試

在我的解決方案我有以下項目

數據 - 我的EF上下文和配置文件來映射實體數據庫 實體 - 我的POCO對象 服務 - 包括我的業務邏輯爲每個實體。加載並保存數據到我的上下文中 Web - WebApi和MVC網站

現在我需要爲Data項目添加一個測試項目嗎?我當中的一部分人說「當然是」,因爲我想確保數據被保存在正確的位置,但是我的另一部分認爲這可能會在服務測試項目中重複出現?

這是一個基本的測試,我把它放在一起,但這是一個很好的測試,還是沒有意義?

[TestClass] 
public class CompanyTest 
{ 
    private MyContext _context; 

    [TestInitialize] 
    public void Initialize() 
    { 
     // set our context 
     _context = new MyContext(); 

     // add test data 
     var companies = GetTestData(); 

     // save data 
     companies.ForEach(s => _context.Companies.Add(s)); 
     _context.SaveChanges(); 
    } 

    [TestCleanup] 
    public void Cleanup() 
    { 
     var companies = _context.Companies.ToList(); 

     // remove all companies 
     companies.ForEach(s => _context.Companies.Remove(s)); 
     _context.SaveChanges(); 
    } 

    [TestMethod] 
    public void AddCompanies_ShouldReturnTwo() 
    { 
     // get data 
     var companies = _context.Set<Company>().ToList(); 

     // check values 
     Assert.AreEqual(2, companies.Count); 
    } 

    [TestMethod] 
    public void GetCompany_CheckDataInEachField() 
    { 
     var companies = _context.Set<Company>().ToList(); 
     Company company; 

     // first company 
     company = companies[0]; 

     Assert.AreEqual("ABC Construction", company.Name); 
     Assert.AreEqual("ABC001", company.Reference); 
     Assert.AreEqual("10-15 TemplateStreet", company.Street); 
     Assert.AreEqual("Brierley Hill", company.Town); 
     Assert.AreEqual("Somerset", company.County); 
     Assert.AreEqual("England", company.Country); 
     Assert.AreEqual("TY1 1AB", company.Postcode); 

     // second company 
     company = companies[1]; 

     Assert.AreEqual("Baseline Design", company.Name); 
     Assert.AreEqual("BAD0023", company.Reference); 
     Assert.AreEqual("23-25 Hedlyn Road", company.Street); 
     Assert.AreEqual("Oxford", company.Town); 
     Assert.AreEqual("Oxford", company.County); 
     Assert.AreEqual("England", company.Country); 
     Assert.AreEqual("OX1 4FG", company.Postcode); 
    } 

    private List<Company> GetTestData() 
    { 
     // companies 
     return new List<Company> 
     { 
      new Company{ Name="ABC Construction", Reference="ABC001", Street="10-15 TemplateStreet", Town="Brierley Hill", County="Somerset", Country="England", Postcode="TY1 1AB",DateAdded=DateTime.Now}, 
      new Company{ Name="Baseline Design", Reference="BAD0023", Street="23-25 Hedlyn Road", Town="Oxford", County="Oxford", Country="England", Postcode="OX1 4FG",DateAdded=DateTime.Now} 
     }; 

    } 
} 

所以我只需要測試項目的服務和Web?

如果有人知道什麼時候以及如何設置測試的好參考資料,請讓我知道。

回答

0

你的問題太寬泛,無法詳細說明一個好的答案,我個人的做法是測試應用程序的每一層,確定數據和服務層。 在服務層,目標應該是測試業務邏輯的正確性,所以數據通常應該被嘲弄或僞造,隔離該層。 正如我之前提到有很多的方法來測試應用程序,即使你想測試你的JavaScript,給你一個想法,看看這一系列的帖子:

或從MSDN開始:

Chapter 13: Unit Testing Web Applications

也有很多關於這個主題的書籍和視頻,只需把你的時間,這不是一件容易的學習曲線,但它是一個必須具備的知識在你的開發人員工具帶

+0

我很感激也許有點貴,但你有點明白我的意思。對於測試來說新的東西不過不想錯過單元測試的一個重要部分,或者完全錯誤地進行測試。感謝您的參考 – Gillardo 2014-10-07 15:06:23