首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该单元测试数据访问层吗?这是一个好的实践吗?怎么做?

我应该单元测试数据访问层吗?这是一个好的实践吗?怎么做?
EN

Stack Overflow用户
提问于 2010-07-26 15:59:18
回答 4查看 5.6K关注 0票数 14

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

单元测试DA层是常见的,还是属于集成测试域?是拥有测试数据库,还是在测试期间创建数据库数据更好?

任何帮助都是非常感谢的。

EN

回答 4

Stack Overflow用户

发布于 2010-07-26 16:17:27

这个问题没有正确的答案,这真的要看情况。有些人(例如Roy Osherove)说你应该只测试有条件逻辑(IF语句等)的代码,这可能包括也可能不包括你的DAL。有些人(通常是那些做TDD的人)会说,你应该测试一切,包括DAL,并以100%的代码覆盖率为目标。

就我个人而言,我只在它有逻辑的时候才测试它,所以最终测试了一些DAL方法,而另一些则没有。大多数时候,你只是检查你的BL是否调用了你的DAL,这有一些优点,但我认为没有必要。我认为更有意义的是让集成测试涵盖端到端的应用程序,包括数据库,它涵盖了GetUserById之类的东西。

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

票数 6
EN

Stack Overflow用户

发布于 2010-07-26 16:08:03

为每一层编写单元测试是一个很好的实践,甚至DAL也是如此。

我不认为在真正的数据库上运行测试是一个好主意,你可能会破坏重要的数据。我们过去常常为测试设置一个db副本,其中只包含运行测试所需的数据。在我们的测试项目中,我们有一个带有测试设置的特殊web.config文件,就像我们的测试数据库的ConnectionString。

票数 1
EN

Stack Overflow用户

发布于 2010-07-26 16:24:10

根据我的经验,单独测试每一层都很有帮助。集成它并再次测试。集成测试通常不会测试所有方面。有时,如果数据访问层(我不知道nHibernate)是生成的代码或某种泛型代码,它看起来就像是大材小用。但我不止一次地看到,系统测试是有回报的。

是冗余吗?在我看来,它不是。

这是常见的做法吗?很难说。我会说不是。我在一些项目中看到了它,但并不是在我工作的所有项目中。通常依赖于团队/个人开发人员的时间/资源和心态。

是拥有测试数据库,还是在测试期间创建数据库数据更好?这是一个完全不同的问题。不容易回答。这取决于你的项目。创建一个新的是很好的,但有时会抛出不真实的bug(尽管有bug)。这取决于您的项目(产品开发或专有开发)。通常在专有的现场开发中,数据库会从某个地方迁移到其中。因此,肯定需要对迁移的数据进行第二次测试。但这相当于系统测试级别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3333120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档