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

标签 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. 断言实体由 Repository 返回

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

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

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

最佳答案

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

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

关于c# - 单元测试 Repository.Update 方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362287/

相关文章:

c# - 获取连续的日期范围

c# - 在 Sharepoint 2010 中使用 Entity Framework 作为 Web 部件的数据源

c# - 如何为匿名对象的属性设置值?

c# - 单元测试忽略并提供相关解释

java - Scala/Gradle项目…哪里存储单元测试所需的超大文件?

svn - 获取在存储库根目录中创建的文件夹的历史记录

c# - 如何使用 itextsharp 更改 PDF 中的背景图像颜色

java - 同行测试 - 有什么好的引用吗?

android - 在不同的 android repo 标签之间切换

android - 下载android源码问题