假设我们有典型的存储库

 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方法时-策略很明确


建立新实体
保存
通过ID获取实体
断言实体由存储库返回


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


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


解决方法似乎需要一些不必要的代码,并且测试会变得肿。
有什么亲切的解决方案吗?

最佳答案

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

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

10-07 19:39
查看更多