database - 用于读取/保存数据到数据库的 .NET 单元测试

标签 database unit-testing

我读到的关于单元测试的大部分内容都是关于测试类及其行为的。但是你如何测试将数据保存到数据库和从数据库中读取数据。在我们的项目中,保存和读取数据是通过 Flex 应用程序(使用 WebORB 作为网关)使用的服务完成的。例如,服务读取有权访问某个模块的所有用户。您如何测试返回的用户实际上是有权访问该模块的用户?

有时能够测试从数据库中加载数据需要数据库中已有数据。在我们的一些测试中,我们首先需要将大量测试数据保存到数据库中,然后才能测试阅读内容...

同样的事情也适用于存储过程。如果数据库中没有数据,你如何测试 sp。现实是为了测试某些存储过程,我们需要十个表中的数据...

谢谢,列文·卡登

最佳答案

您可以对数据库操作进行测试,但尽可能避免它,否则:

  • 它们将比普通测试运行得慢(更有可能是集成测试)
  • 他们需要更多的设置/拆卸工作(数据库/模式/表数据)
  • 他们引入了对您的测试框架的外部依赖

可能也是一种代码味道,即您的类没有将与数据库相关的工作与其他工作分开,例如商业逻辑。然而它可能不会,我们有一个框架测试来验证自动生成的 SQL 脚本在插入新数据后返回预期的增量标识值,据我所知,除了针对数据库执行它之外,没有其他方法可以测试此代码是否正常工作。您可以模拟它,或者只是假设如果 SQL 符合您的预期,那么它就没问题,但我不喜欢这种假设,因为有太多其他代码依赖于它。

根据您的测试框架,您应该将这些测试标记为 [Database] 相关,以便您将它们与其他测试分开。

关于database - 用于读取/保存数据到数据库的 .NET 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/590642/

相关文章:

database - MemSQL 中的最大列数是多少?

mysql - 数据库无法在 WordPress 主题的根上运行

mysql,转储,数据库恢复

ruby-on-rails - 单元测试需要 attr_accessor,但会阻止字段被写入

c# - 如何在 ASP.NET Core 1.1 中对使用 HttpContext 的 MVC Controller 进行单元测试

c# - 如何模拟 IDataRecord?

php - 如何处理 n :m relation correctly with PHP&MySQL?

mysql - 从 MySQL 获取多列百分比

javascript - 测试 commonjs 模块的替代方案是什么?

python - 如何测试模型是否在 FastAPI 路由中使用?