我正在尝试使用旧的基于Web的遗留代码使用PHPUnit来测试我们的源代码树,尝试尽可能少地进行更改。一旦测试到位,我就可以更改库函数以便更好地使用,并进行更好的单元测试。但是,我需要进行测试以允许我更改它。
问题:我们在应用程序的许多项目中共享库代码,但它们都共享一个公共目录结构。当网站运行时,当我们需要库中的文件时,本地目录可用。
考虑一下:
APP1
APP2
Library
Library/COMM
Library/UTIL
...
启动应用程序时,您可以为不同的应用程序指向APP1或APP2。他们有公共代码(消息,数据库访问等)。在图书馆。问题是,库中的函数需要特殊的参数来工作,因为它们今天被编码。这些库只需要('Config.php');因为它可以在APP1或APP2中找到(它们都有一个具有特定应用程序的设置),并且当Library文件需要()时,Web服务器使用APP1或APP2作为目录。
虽然这有效,但在尝试在PHPUnit中运行代码时会失败。我的问题是如何包含Config.php文件,而不必在测试到位之前过多地更改遗留代码。
我知道这是错误的格式,但这是我继承的。
我不能简单地要求('../../ APP1 / Config.php');因为两个应用程序共享此库。
非常感谢任何建议。
注意:在我们开始编写测试时,我们正在尝试测试库和所有项目,因此不确定include_path是否会解决它。我正在为每个应用程序考虑不同的PHPUnit.xml.dist文件,但是由于公司对立即测试所有应用程序的影响而试图避免这种情况。
答案 0 :(得分:1)
从phpunit.xml(< phpunit bootstrap =“./ bootstrap.php”> ...)和cli(--bootstrap ./bootstrap.php)中,您可以指定引导程序文件。在该文件中,您可以执行此操作。
作为建议,当说明测试遗留代码库时,不要从单元测试开始。你的第一个目标应该是“实现某种自动化测试”。对于大多数人来说,这将是系统测试。这是测试堆栈/站点的整体。常见的工具是Selenium。
这仍然不是一项小任务。您将要做的就是“如何将我的系统置于一致的状态”。您可能需要做的第一件事是自动导入和清空数据库中的测试数据。一旦你能做到这一点,你将能够可靠地运行自动化测试。你需要让许多其他东西保持一致,日期和时间都是一个很好的例子。
我的观点是,从经验来看,从单元测试开始不会为您提供证明自动化测试值得付出所需的价值。
祝你好运!