首页 / 知识
关于sql server:如何对持久性进行单元测试?
2023-04-11 15:56:00

How do I unit test persistence?作为从事测试驱动开发的新手,我经常对如何将测试持久性单元化到数据库感到困惑。 我知道从技术上讲这将是一个集成测试(而不是单元测试),但是我想找到以下最佳策略: 做这些的最佳实践是什么? 关于测试SQL:我知道可以做到这一点,但是如果我使用像NHibernate这样的O / R映射器,它会在用于输出查询的别名中附加一些命名疣,因为这有点不可预测,我不确定我可以测试一下。 我应该放弃所有内容,只是信任NHibernate吗?我不确定这是谨慎的做法。 查看数据库单元。它是一个Java库,但是必须有一个C#等效项。它使您可以使用一组数据来准备数据库,以便了解数据库中的内容,然后可以与DB Unit交互以查看数据库中的内容。它可以在许多数据库系统上运行,因此您可以使用实际的数据库设置,也可以使用其他方式,例如Java中的HSQL(带有内存中选项的Java数据库实现)。 如果要测试代码是否正确使用了数据库(很可能应该这样做),则这是隔离每个测试并确保数据库已准备好预期数据的方法。 正如Mike Stone所说,DbUnit非常适合在运行测试之前使数据库进入已知状态。测试完成后,DbUnit可以将数据库恢复到运行测试之前的状态。 DbUnit(Java) DbUnit.NET 您可以通过模拟数据库连接来进行单元测试。这样,您可以构建方案调用流程中的特定查询成功或失败的方案。我通常会建立模拟期望,以便忽略实际的查询文本,因为我真的想测试该方法的容错能力以及它的自身处理方式-SQL的具体内容与此无关。 显然,这意味着您的测试实际上不会验证该方法是否有效,因为SQL可能是错误的。这就是集成测试开始的地方。为此,我希望其他人会得到更彻底的答案,因为我才刚开始与自己接触。 我在这里写了一篇有关对数据层进行单元测试的文章,涵盖了这个确切的问题。为(可耻的)插件道歉,但文章太长,无法在此处发布。 希望对您有所帮助-在过去的6个月中,我在3个活跃的项目中一直表现出色。 问候, 罗布·G 对于基于JDBC的项目,可以使用我的Acolyte框架:http://acolyte.eu.org。借助JDBC抽象,它可以模拟要测试的数据访问,而不必管理特定的测试数据库。
对于 我在对持久性进行单元测试时遇到的问题,尤其是在没有ORM并因此嘲笑数据库(连接)的情况下,是您真的不知道查询是否成功。可能是您的查询是专门针对特定数据库版本设计的,并且仅在该版本上成功。如果您模拟数据库,您将永远找不到。因此,我认为,单元测试持久性仅是有限的用途。您应该始终添加针对目标数据库运行的测试。 我通常创建一个存储库并使用它来保存我的实体,然后检索一个新的。然后,我断言检索到的内容等于保存的内容。 从技术上讲,持久性的单元测试不是集成测试。 使用mbUnit的C#,您只需使用SqlRestoreInfo和RollBack属性
在NUnit中也可以这样做,但属性名称略有不同。 至于检查查询是否成功,通常需要在第二个查询之后进行查询,以查看数据库是否已按预期进行了更改。 我还将模拟数据库,并检查查询是否符合您的期望。测试存在检查错误sql的风险,但是在集成测试中会检测到 |
最新内容
相关内容
python如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发python单元测试中的函数整理
python单元测试中的函数整理,培训,环境,测试,方法,函数,单元,条件,实例,里面,以上,python单元测试中的函数整理1、setUp准备环境。执行每个测关于sql Server:将文件存储在数据库
关于sql Server:将文件存储在数据库中而不是文件系统中?,关于sql Server:将文件存储在数据库中而不是文件系统中?,性能,文件系统,文件存关于数据库:没有Linq时像Linq一样查
关于数据库:没有Linq时像Linq一样查询,关于数据库:没有Linq时像Linq一样查询,框架,项目,支持,我有一个,Querying like Linq when you d关于单元测试:如何使初级程序员编写
关于单元测试:如何使初级程序员编写测试?,关于单元测试:如何使初级程序员编写测试?,试了,程序员,你写,有一个,How to make junior progra关于单元测试:如何模拟Sealed类?
关于单元测试:如何模拟Sealed类?,关于单元测试:如何模拟Sealed类?,模拟,模式,密封,密封类,How do you mock a Sealed class?模拟密封课程关于mysql:如何在开发,测试和生产中
关于mysql:如何在开发,测试和生产中管理数据库?,关于mysql:如何在开发,测试和生产中管理数据库?,数据库,服务器,数据,很难,How do you mana使用 MS Access 作为 MySQL 数据库
使用 MS Access 作为 MySQL 数据库后端的前端的问题?,使用 MS Access 作为 MySQL 数据库后端的前端的问题?,数据库,用户,文件,编写,Iss关于 .net:如何使用 ADO.NET DataSe
关于 .net:如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中,关于 .net:如何使用 ADO.NET关于SQL Server:MOSS SSP问题-从已
关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,的是,生关于测试:为什么我应该练习测试驱动
关于测试:为什么我应该练习测试驱动开发?应该如何开始?,关于测试:为什么我应该练习测试驱动开发?应该如何开始?,代码编写,编写代码,测试驱关于数据库:将图像存储在数据库中-
关于数据库:将图像存储在数据库中-是或否?,关于数据库:将图像存储在数据库中-是或否?,位置,图像,应用程序,文件系统,Storing Images in D