我是否应该对我的SQLRepository运行单元测试?

时间:2009-07-10 18:59:52

标签: c# unit-testing tdd repository-pattern

我正在开发一个基于存储库模式的域模型,作为TDD的一部分,我的所有单元测试都是针对测试存储库的。

我的问题是:我在什么时候针对存储库的SQL版本创建集成测试?

我担心的是从对象(Test Repository)访问数据的代码可以正常工作。但是数据库版本(SQL Repository)的内容是如此不同,以至于我的SQL资源库中的重要代码最终无法正常运行并且本身未经过测试。我如何确保它按预期工作?我错过了关于这个过程的一些事情吗?

问候。

2 个答案:

答案 0 :(得分:3)

你应该有模拟存储库的测试(就像你看起来那样),它不会查询数据库本身,而是返回结果,就像它们那样。这些是调用存储库函数的函数的测试。

但它也很有用,建议让测试检查数据库本身,并检查它们是否返回它们应该的内容。它们也应该是“单元测试”,而不是取决于其他东西。尽量不要依赖数据库处于确定状态,而是进行设置以构建数据库初始状态。它们可能会更慢,并且可能不会在每次提交和构建时运行(我的意思是,不要运行如果真的需要很多时间)。

最后,在集成测试中,做你应该做的所有事情。

答案 1 :(得分:0)

在我看来,只要你有相应的数据库代码,你的被测单元依赖于继续,并添加使用真实存储库的集成测试。伪造和剔除事物使单元测试更容易,并使您可以专注于代码的特定方面,而不会受到外部依赖性的挫败并正确设置它们。但是,在一天结束时,您不会发送带有存根,假货和嘲笑的产品。随附的产品具有真正的依赖关系和组件,所有这些都必须协同工作。因此,无论何时运行测试,您都需要知道应用程序的某些部分是否在一起工作。如果我的应用程序的一部分无法持久更改数据库,我想尽快知道它。因此,如果您的外部依赖项(在您的情况下是数据库)处于为您的代码提供某种级别的功能和价值的级别,请继续并添加一组集成测试。

请注意,运行集成测试通常需要比单元测试更长的时间。因此,您可能希望在CI构建期间仅运行单元测试。这样,您可以更快地获得有关构建和代码库运行状况的反馈。但是,您应该在每晚构建中包含集成测试,以便了解代码在实际中的工作方式。