gpt4 book ai didi

c# - 保持面向数据库的测试套件最新

转载 作者:行者123 更新时间:2023-12-01 05:24:08 25 4
gpt4 key购买 nike

考虑为以数据库为中心的服务使用自动化单元测试套件。许多小部件可以在没有任何数据库连接的情况下进行单元测试,但是能够插入真实的数据库快照(或多个快照)并针对它执行更大的集成场景也很有用。因此,一些关键测试包括与测试代码本身分开的预执行和执行后数据快照的形式。

服务发展很快,数据库架构也快速发展。这会不断地使测试数据失效,并且对于开发人员来说,保持测试套件处于最新状态而不让有缺陷的行为渗透到更新的快照中变得具有挑战性。

通常,甚至不可能针对旧的(测试数据库)模式执行更新版本的服务;这可以通过两层数据库快照来解决,一层用于初始化(测试输入),另一层纯粹用于检查(例如,预期的测试输出)。然后,初始化模式/数据可以与应用程序一起自动升级,但显然不是预期的输出数据。

我已经经历过几次这种情况,但我希望能有更多关于该主题的阅读 Material 以及人们的经验、技术和方法的链接,特别是在 Java、.NET 和可能的纯数据库环境的上下文中。

这个问题故意有点宽泛,因为我不知道我会从中学到什么,但这里还有一个更窄的版本:

是否有任何广泛使用的 Java 或 .NET 框架可以让开发人员更轻松地区分架构差异和行为(数据)差异,并半自动地将现有测试数据更新为新架构?

最佳答案

  1. 这是一个组织测试套件的问题,而不是拥有一个监视数据库更改的框架的问题。例如,如果您使用 Hibernate/EJB 持久性模型,那么在执行测试套件之前,您可以从对象映射创建数据库(例如使用 Hbm2Ddl)。然后每个测试通过保存实体(即没有任何直接 SQL)创建必要的对象。基本上来说,在这种情况下,您不直接处理数据库,而是通过应用程序中的持久层处理。执行结束时,数据库模式将被删除。

  2. 另一方面,这是一个过程的问题。每个数据库更改都必须保持测试的完整性。不像有些人在不考虑测试完整性的情况下更改数据库。基本上,如果破坏了测试,则不得接受源代码的任何更改,无论是代码还是数据库结构更改。

换句话说,在开发过程中应该有一定的纪律+正确的测试环境设置和通过持久层工作(即不是测试数据库,它是生产数据库的转储,带有没有或带有最小集的测试向上/拆卸)。

关于c# - 保持面向数据库的测试套件最新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com