单元测试Repository.Update方法的正确方法

时间:2012-04-28 09:32:44

标签: c# unit-testing repository mstest

假设我们有典型的存储库

 public class Repository:IRepository<Entity>
    {
            public Entity GetById(int id)
            {
                //blah
            }

            public IEnumerable<Entity> All()
            {
                //blah
            }

            public void Insert(Entity entity)
            {

            }

            public void Update(Entity entity)
            {
                //blah
            }

            public void Delete(Entity entity)
            {
                //blah
            }
    }

使用MSTest,我想测试存储库插入和更新实体的能力。只要它是具体的存储库,我就是在测试一个真正的数据库。

所以,当我测试Insert方法时 - 策略是明确的

  1. 创建新实体
  2. 保存
  3. 按ID
  4. 获取实体
  5. 存储库
  6. 返回断言实体

    但是当我想到Update方法测试时,这一切都变得有些棘手。 主要问题是

    • 如何确保数据库已经存储了我可以获取和尝试的对象 更新?
    • 如何针对空数据库测试更新?

    看起来变通方法需要一些不必要的代码,测试会变得臃肿。 有没有任何优雅的解决方案?

1 个答案:

答案 0 :(得分:3)

使用ClassInitialize TestInitialize以及ClassCleanupTestCleanup使用知名实体预填充数据库。然后针对它们运行Update()测试。

不确定如何解释“不必要的代码”......看起来您将不得不做一些事情来填充数据库以测试Update()方法;至少使用上面列出的属性可以实现初始化和清理数据库所需的逻辑,而不会污染实际的测试方法。