unit-testing - 我应该对数据访问层进行单元测试吗?这是一个好的做法吗?如何去做?

标签 unit-testing testing integration-testing data-access-layer

如果我有数据访问层 (nHibernate),例如一个名为 UserProvider 的类 和一个业务逻辑类 UserBl,我是否应该同时测试它们的方法 SaveUser 或 GetUserById,或者 DA 层中从 BL 层调用的任何其他公共(public)方法。这是冗余还是常见做法?

单元测试DA层是通用的,还是属于集成测试领域的? 有测试数据库好还是测试时创建数据库数据好?

感谢任何帮助。

最佳答案

这个没有正确答案,这真的取决于。有些人(例如 Roy Osherove)说您应该只测试具有条件逻辑(IF 语句等)的代码,这些代码可能包含也可能不包含您的 DAL。有些人(通常是从事 TDD 的人)会说您应该测试所有内容,包括 DAL,并以 100% 的代码覆盖率为目标。

就我个人而言,我只在它具有逻辑时才对其进行测试,因此最终会测试一些 DAL 方法,而另一些则没有。大多数时候你只是检查你的 BL 调用你的 DAL,这有一些优点,但我认为没有必要。我认为进行端到端涵盖应用程序的集成测试更有意义,包括涵盖 GetUserById 等内容的数据库。

无论哪种方式,您可能已经知道这一点,但请确保您的单元测试不接触实际数据库。 (这样做没有问题,但这是集成测试而不是单元测试,因为它需要更长的时间并且涉及复杂的设置,并且应该单独运行)。

关于unit-testing - 我应该对数据访问层进行单元测试吗?这是一个好的做法吗?如何去做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333120/

相关文章:

ruby-on-rails - rails rake : test are slow

unit-testing - 有没有一个像 DB2 一样好的内存数据库

unit-testing - 在 Grails App 中测试自定义约束

testing - 您的公司/工作/项目是如何进行集成测试的?

java - 如何使用 Maven 通过注释值搜索并运行 TestNG 测试方法?

java - Spring CrudRepository deleteAll() 什么都不做

unit-testing - 如何测试 Terraform 文件

java - 测试时如何将模拟对象注入(inject)类?

testing - 检查Elasticsearch是否已经完成索引

integration-testing - maven-embedded-glassfish-plugin 部署 2 个应用程序