代码之家  ›  专栏  ›  技术社区  ›  David

测试实体持久性的方法和建议

  •  2
  • David  · 技术社区  · 14 年前

    每个人都喜欢单元测试。但是测试实体的持久性有点不同。您正在使用不同的语言测试跨多个层发生的进程。您的测试有副作用(在某种意义上,行被添加/修改等)。

    在这方面我可能有很多重要的问题没有想到。为了积分追逐者的利益,我将标记的答案,似乎有最小的副作用和最容易实施。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Grzenio    14 年前

    对数据持久性进行单元测试几乎是不可能的,所以我通常在集成级别进行。

    关于环境管理,您应该已经有了一些机制来配置数据库连接(这样您就可以拥有测试和生产环境)-有很多方法可以做到这一点,包括Microsoft产品和内部解决方案-因此您应该使用相同的方法来配置生成计算机。

        2
  •  1
  •   Martin R-L    14 年前

    在过去的六年左右,我主要使用NHibernate来保持持久性。

    每个 测试(在集成案例中,随后杀死DB)。这需要更长的时间来运行,但是清除代码的风险更大(顺便说一句,xUnit测试模式书中对此进行了讨论)。

        3
  •  0
  •   Ladislav Mrnka    14 年前

    我的方法是创建一组集成测试,用于测试数据访问层(存储库和映射)。我认为如果您使用ORM工具,它使用“约定重于配置”的方法,比如EF中的POCO映射,这一点非常重要。我有一个DB初始化脚本,它创建新的数据库(和当前的开发DB相同)并创建初始的测试数据集。此脚本仅在测试运行开始时运行一次。在测试运行结束时删除数据库。每个集成测试都使用在测试结束时回滚的事务,因此所有测试的测试数据都是相同的。为了验证DB中的数据,我使用了带有标准SqlCommand方法的helper类。要使用SqlCommand,您必须为测试使用readuncommitted事务隔离级别,因为您通常不共享SqlCommand和EF context之间的连接。