如何自动测试数据库驱动的功能?

时间:2011-02-25 12:19:11

标签: c# sql-server database unit-testing automated-tests

我正在尝试改进我的应用程序中的自动化测试,但不确定最佳方法。

我的应用程序从多个表单中收集数据,对其进行重新编码并将其存储在数据库中。我创建了一个非常复杂的SQL视图,它将结构展平,因此可以导入到统计数据包(SPSS)中。

我担心的是视图很复杂,我想围绕它自动进行一些测试。

目前我有一些功能测试,它们创建一个完整的表单对象模型,并将其发送到应用程序中。然后,我从数据库中检索视图,并使用反射来测试检索到的视图字段是否与原始数据匹配。

问题是这是非常手动和沉重的,我的装置很长,添加新场景(即模型的各个部分不完整)很麻烦。

有没有人对如何改进测试策略有任何建议?提示招数欢迎!

谢谢!

2 个答案:

答案 0 :(得分:2)

DbFit非常适合这种情况。 DbFit是FitNesse的扩展,你可能已经在使用“固定装置”了。在任何情况下,DbFit都可以很容易地设置一个测试,您可以在其中播种一些数据,运行View,比较预期结果,然后它会自动回滚您刚刚为测试播种的数据。当您向View添加更多字段时,可以非常轻松地进行更新。并且它不像其他SQL“单元”测试套件那样在数据库中不需要其他对象。

您可以在以下网址找到有关使用DbFit的更多信息:

http://benilovj.github.com/dbfit

http://groups.google.com/group/dbfit

这是我为它编写的教程,解释了基本选项:

http://www.sqlservercentral.com/articles/Testing/64636/

答案 1 :(得分:1)

这是一个非常难以回答的问题。对我来说几乎听起来像你想做一个单独的测试,一次测试一切。

首先,应该构建您的应用程序,因此每个功能都在其自己的类中隔离,从而使其易于测试,并且在测试其他内容时可以通过存根轻松替换。应注入对其他函数的依赖性(依赖注入)。

其次,您应该对外部系统(如数据库连接和SPSS文件编写器)使用相同的技术。这涉及包装此类功能,因此也可以注入这些依赖项,因此在测试应用程序的其他方面时会被存根替换。

第三,请注意,如果难以编写测试,99.99%的时间表明您的设计不够强大。

此致 的Morten