【问题标题】:Creating Unit Tests for first time第一次创建单元测试
【发布时间】:2014-10-07 09:46:04
【问题描述】:

我正在使用 asp.net mvc、实体框架 6 和 Visual Studio 2013 创建一个新项目。我想从一开始就直接创建测试,否则它们永远不会被创建,但我不确定何时以及测试什么.

在我的解决方案中,我有以下项目

数据 - 我的 EF 上下文和将实体映射到数据库的配置文件 实体 - 我的 POCO 对象 服务 - 包含每个实体的业务逻辑。加载数据并将其保存到我的 ef 上下文 Web - WebApi 和 MVC 网站

现在我需要为数据项目添加一个测试项目吗?我的一部分说“当然可以”,因为我想确保将数据保存在正确的位置,但我的另一部分认为这可能会在服务测试项目中重复?

这是我整理的一个基本测试,但它是一个很好的测试,还是没有意义?

[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 的测试项目吗?

如果有人知道很好的参考资料来解释您应该何时以及如何设置测试,请也告诉我。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework unit-testing testing


    【解决方案1】:

    您的问题太宽泛,无法详细说明,我个人的方法是测试应用程序的每一层,确保数据和服务层。 在服务层中,目标应该是测试业务逻辑的正确性,因此通常应该模拟或伪造数据,隔离层。 正如我之前提到的,有很多方法可以测试应用程序,即使您想测试 javascript,也可以让您了解一下这个系列的帖子:

    或从 msdn 开始:

    Chapter 13: Unit Testing Web Applications

    也有很多关于这个主题的书籍和视频,慢慢来,这不是一个容易的学习曲线,但是你的开发工具带上必须有知识

    【讨论】:

    • 我很欣赏它可能有点模糊,但你有点明白我的意思。对测试有点陌生,但只是不想错过单元测试的重要部分,或者完全错误地进行测试。感谢您的参考
    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多