如何对方法进行单元测试以检查它是否保存到数据库中?

时间:2015-12-08 18:46:06

标签: c# unit-testing

我需要进行单元测试以检查Create方法是否保存到数据库。我知道这种方法不应该在实际项目中进行单元测试。我这样做只是为了学校项目中的学习和演示目的。我知道我必须使用模拟对象和控制器的一些抽象依赖,因为我在其他一些答案中读到,但因为我刚开始学习c#,这对我没有多大帮助。 你能告诉我一个简单的解决方案或一些建议。 感谢。

这是Create方法:

[HttpPost]
[ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "Id,Code,Description")] LocationCode locationCode)
    {
        if (ModelState.IsValid)
        {
            uow.LocationCodeRepository.Insert(locationCode);

            return RedirectToAction("Index");
        }

        return View(locationCode);
    }

这是Model中的LocationCode类:

using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace BookInventory.Models { public class LocationCode { [Key] public int Id { get; set; } public string Code { get; set; } public string Description { get; set; } public virtual ICollection<Book> Books { get; set; } } }

1 个答案:

答案 0 :(得分:0)

我所做的是创建一个为每个单元测试创​​建LocalDB测试数据库的小类。它正在TestInitialize中初始化(在每个单元测试之前运行),它执行以下操作:

  1. 检查是否存在现有数据库。如果是,请删除它。
  2. 创建新数据库。
  3. 用一些测试数据给它播种。
  4. 运行单元测试。
  5. 进入下一个测试,然后返回1.
  6. 运行速度非常快,并且允许您真正测试查询/ ORM,而不是仅仅模拟存储库并假设一切正常(在我看来这是非常错误的,特别是如果您正在编写自己的查询而不是使用LINQ。使用SQL查询重构某些东西可能很容易破坏。)