【发布时间】:2012-10-05 11:15:52
【问题描述】:
我正在尝试在旧版 PHP 应用程序中实现一些单元测试。
这方面存在许多挑战,但特别是对于这个问题,我目前正在研究一个管理应用配置的小类。
类接口非常简单;它执行以下操作:
- 构造函数调用 Populate 方法,该方法使用我们的 Recordset 类从数据库加载所请求模块的配置。
- Get 方法,返回指定的配置值。
- 设置方法,设置内存中的配置值。
- Save 方法,将配置更新写回数据库。
测试 Get/Set 方法很简单;它们直接映射到私有数组,并且几乎可以按照您的预期工作。
我遇到的问题是测试数据库处理。该类使用配置表上的许多字段(模块名称、语言等)来确定要加载哪些配置项以及优先级。为此,它构造了一系列复杂的 SQL 字符串,然后直接调用 DB 以获取正确的配置数据。
我不知道如何为此编写单元测试。除了 Get/Set 方法之外,该类几乎完全由构建 SQL 字符串和运行它们组成。
如果不针对真正的数据库实际运行它,我看不到一种合理测试它的方法,以及随之而来的所有问题——如果不出意外的话,配置加载器的复杂性意味着我需要至少七个或八个测试数据库填充了稍微不同的配置。看起来它会变得难以管理和脆弱,这会在某种程度上破坏这一点。
谁能建议我应该如何从这里开始?甚至可以对这种类进行单元测试吗?
非常感谢。
【问题讨论】:
标签: php unit-testing dependencies legacy-code