8

我有一个用 Zend Framework 编写的 PHP 应用程序。它使用 Phing 作为构建系统,使用 PHPUnit 进行单元测试。所有这些部分都有配置设置。Zend 使用application.xml,Phing 使用build.xml和可选的一些build.properties,以及 PHPUnit 使用phpunit.xml

但是,我在哪里存储所有三个组件所需的信息?想想数据库配置(例如密码)。

就我而言,它application.xml有不同的部分(开发、登台、生产),都具有不同的数据库配置。我最近在我的应用程序中集成了一个 ORM,现在我想对我的模型进行单元测试。所以我有 PHPUnit 使用的第四个数据库(单元测试)。

PHPUnit 可以处理夹具数据,但不能处理数据库模式。所以,我想我会编写一个 Phing 构建目标,将数据库模式从生产或登台复制到 unittest 数据库。这样我就有了额外的好处,我什至可以对我的数据库迁移脚本进行单元测试。但为了做到这一点,Phing 需要同时访问多个数据库。

我的第一个直觉是把所有四个数据库的所有配置都放进去build.properties,让 Phing 简单地生成application.xmlphpunit.xml. 但是,让构建系统生成配置文件感觉很脏。

这里最好的解决方案是什么?还是我应该简单地复制配置细节而不用太担心?

想法

我可以简单地复制它们。这只是一些设置,它们不应该经常更改。但我敢打赌,当它们发生变化时,我会忘记重复(因为它很少发生)。共享参数包括:

  • 数据库配置(开发、登台、生产和单元测试)
  • 包括路径。我们使用一些不支持自动加载器的旧库。到目前为止,我们已经通过智能自动前置文件部分解决了这个问题。
  • 一些网络服务 API 凭证
4

1 回答 1

7

我的第一直觉是将所有四个数据库的所有配置都放在 build.properties 中,让 Phing 简单地生成 application.xml 和 phpunit.xml。但是,让构建系统生成配置文件感觉很脏。

好吧,完全生成它们似乎有点脏。但是,如果构建系统只是在各种配置文件的 .dist 版本上从 Phing 的 build.properties 文件中进行令牌替换,那对我来说似乎没问题。

例如,请参阅Dasprids 博客的源代码

于 2011-07-28T11:49:43.263 回答