nem*_*mke 13 testing integration-testing unit-testing data-access-layer
如果我有数据访问层(nHibernate),例如一个名为UserProvider的类和一个业务逻辑类UserBl,我是否应该测试他们的方法SaveUser或GetUserById,或者从BL层调用的DA层中的任何其他公共方法.这是一种冗余还是常见做法?
单元测试DA层是常见的,还是属于Integration测试域?在测试期间拥有测试数据库或创建数据库数据是否更好?
任何帮助表示赞赏.
对此没有正确答案,这实际上取决于.有些人(例如Roy Osherove)说你应该只测试具有条件逻辑(IF语句等)的代码,这些代码可能包含也可能不包括你的DAL.有些人(通常是那些做TDD的人)会说你应该测试一切,包括DAL,并且目标是100%的代码覆盖率.
我个人只测试它是否有逻辑,所以最终测试了一些DAL方法而一些没有.大多数时候你最终都会检查你的BL是否会调用你的DAL,这有一些优点,但我认为没有必要.我认为让端到端覆盖应用程序的集成测试更有意义,包括数据库,其中包括GetUserById等内容.
无论哪种方式,您可能已经知道这一点,但请确保您的单元测试不会触及实际的数据库.(没问题,但这是一个集成测试,而不是单元测试,因为它需要更长的时间并涉及复杂的设置,应该单独运行).
为每一层(甚至 DAL)编写单元测试是一个很好的做法。
我认为在真实数据库上运行测试不是一个好主意,您可能会破坏重要数据。我们曾经为测试设置数据库的副本,其中只有足够的数据来运行测试。在我们的测试项目中,我们有一个特殊的 web.config 文件,其中包含测试设置,例如测试数据库的 ConnectionString。