【发布时间】:2015-02-18 17:01:41
【问题描述】:
我的任务是测试现有应用程序,过去我也用自己的应用程序测试过,但我有点不确定我是否使用了正确的方法。
假设我有以下示例:
users 类有一个名为getAll() 的函数,它通过查询数据库返回用户列表。有(据我所知)两种直接的方法来测试这个功能:
在单元测试中独立使用
getAll()函数使用的相同查询代码。然后,执行getAll()调用并断言结果。让数据提供者提供具有预期格式的单元测试数据,硬编码为我们知道包含在数据库中的值。例如,我们将传递一个硬编码数组,其中包含
getAll()函数期望格式的所有用户,并断言结果。
虽然第二种方法看起来更符合测试,但它的附加结果是增加了一层安全风险。任何有权访问测试套件的人也可以明文访问许多潜在的敏感数据。最重要的是,根据数据库大小的查询,像上面这样的查询可能会因为很少的原因使测试变得荒谬可笑。
哪种方法是首选?
【问题讨论】:
-
如果您需要一些数据库来测试您的代码,那么您所拥有的当然是集成测试而不是单元测试。
-
@unigeek 这根本没有帮助-尽管您在技术上是正确的。在这一点上,存根数据库将是一项巨大的工作(它是一个相对成熟的应用程序),我看不出在这种情况下使用存根或真实连接之间的区别,因为值必须相同。
-
@user991710 如果您不了解区别可能会有所帮助-我确实看到您在问题标题中提到了“单元测试”,因此对我来说您确实并不明显。我喜欢在单元测试中提供帮助——发现这个贴错标签会花费我很多时间。
标签: unit-testing testing automated-tests