2

假设我们有典型的存储库

 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. 断言实体由存储库返回

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

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

看起来解决方法需要一些不必要的代码,并且测试会变得臃肿。有什么优雅的解决方案吗?

4

1 回答 1

3

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

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

于 2012-04-28T09:47:32.550 回答