2014-10-07 85 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