metaclass-nl / fit-shelf
PHP5中重新实现了Rick Mugridge和Ward Cunningham所著《Fit for developing Software》一书中描述的Fit库功能
Requires
- php: >=5.3.2
- metaclass-nl/phpfit: *
This package is auto-updated.
Last update: 2024-09-10 22:31:52 UTC
README
简介
Fit Shelf是用PHP重新实现了Rick Mugridge和Ward Cunningham所著《Fit for developing Software》一书中描述的Fit库功能,主要涵盖第10章和第28章。有关使用说明,请参阅本书的相应章节以及http://fit.c2.com。
Fit shelf不是Fit库的移植。重新实现的原因是,移植Fit库的1175KB Java源文件(不包括Fit和示例)需要做大量的工作。Fit Shelf只有53.2KB的PHP源文件[1],因此更加简单。正如其名所示,它并不试图成为一个完整的库,而更像是一个小架子。但它更容易理解、使用和移植。并且是用PHP编写的!
安全
请勿在生产环境中安装。
警告:Fit Shelf允许测试访问测试对象上的任意属性和方法。它没有授权的概念。允许最终用户运行自行修改的测试可能会暴露敏感数据、引发致命错误,并使系统处于未定义状态。
安装和配置
-
使用Composer
请参阅fit-skeleton包的Readme.md。
需要PHP >= 5.3.2。 -
手动
请参阅手动配置说明。
需要PHP >= 5.3.2。
特殊功能
-
混合数据类型
为了支持PHP的混合数据类型,包含了一个特殊的适配器:PHPFIT_TypeAdapter_PhpTolerant.php。由于适配器旨在与任何类型一起工作,因此当缺少类型信息时,它会被用作回退。在实践中,这意味着在大多数情况下,您可以简单地运行任何测试,并忘记关于数据类型的问题。
然而,如果您确实提供了类型信息,此适配器将委托给相应的PhpFit数据类型适配器。
-
支持尚未定义的属性和__get、__set和__call魔法方法
Fit库支持在测试中直接使用被测系统的属性和方法。使用DoFixture,如果方法或属性不存在,则会加载一个固定装置。但在PHP5中,如果您实现了正确的魔法方法,您可能可以获取或设置不存在的属性或调用方法。您还可以设置未定义的属性。
为了允许您无条件地获取、设置和调用,Shelf的DoFixture支持不默认加载固定装置的'get'、'set'和'call'固定装置方法。
-
适应应用程序元模型
在Java中,Java Beans标准指定了单个元模型:属性有getter、setter以及可能的一个字段,可以通过Bean Descriptors和反射获取元数据。
在PHP中,没有这样的严格标准。文档和__get和__set魔法方法表明了属性的意义,但特定应用程序和框架可能会遵循不同的元模型。例如,将书中的示例一对一地移植到PHP时,它们遵循Java Beans标准,这与PHP的文档中建议的方式不同。
为了支持这一点,Shelf使用了两层适配器,一层用于元模型,另一层用于实际的类型。目前有两个MetaModel适配器可用
- PHPFIT_TypeAdapter_PhpTolerant:用于普通PHP对象,使用成员变量作为属性。这是Shelf fixture默认使用的适配器
- PHPFIT_TypeAdapter_BeanTolerant:用于类似Beans的对象,使用getter和setter方法来访问属性。
您可以通过添加以下方法在您的fixture类中激活适配器
protected function interpretTablesInit() { parent::interpretTablesInit(); fitshelf\ClassHelper::adapterType('BeanTolerant'); }
通常,您的测试将从激活fitshelf\DoFixture的某个子类开始,该fixture将运行此方法。从那时起,您的测试使用的其他shelf fixtures也将使用此适配器。直接从PHPFIT扩展的fixture需要添加另一个方法
static function getType($classOrObject, $name, $property) { return fitshelf\ClassHelper::adapterType(); }
Fit Shelf为已经具有此方法的几个PHPFIT fixtures提供了子类。
如果您的应用程序(或框架)的元模型不同,您可以使用Shelf提供的适配器作为示例来实现自己的类型适配器。如果您使用Composer,您可以使用Composer的ClassLoader或Fit Shelf的ClassLoader来自动加载它们。
警告:适配器将被重构以支持php元模型的严格类型。
发布说明
这个beta版本已适配PSR-0命名空间和类加载。如果您在之前的Fit Shelf版本上运行Fixtures,您将需要对其进行适配。
这个beta版本不包括CalculateFixture和SetupFixture。
这个beta版本不包括从“Fit for developing Software”一书中的测试描述中移植的所有示例。请帮助移植更多旨在在Fit Library上运行的测试。
应重构适配器以支持严格类型,请参阅PHPFIT_TypeAdapter_PhpTolerant.php。
可能对重复出现的代码进行一些小的重构。
请参阅文档文件夹中的ChangeLog。
支持(荷兰语)
MetaClass提供软件维护和开发、测试和fixture的荷兰语支持和帮助。更多信息请访问http://www.metaclass.nl/
版权和许可
感谢Rick Mugridge为Fit Library的功能规范(http://sourceforge.net/projects/fitlibrary/)及其背后的思想提供支持,MetaClass对其不享有任何权利。
此实现(Fit Shelf)的版权(c)2010-2012 H. Verhoeven Beheer BV,MetaClass Groningen荷兰。
根据GNU通用公共许可证版本3或更高版本许可。
本程序是自由软件:您可以重新分发它,也可以根据自由软件基金会发布的GNU通用公共许可证的条款修改它,许可证的版本为3,或者(根据您的选择)任何更高版本。
本程序分发时附带“按原样”保证,不提供任何明示或暗示的保证,包括但不限于适销性保证或适用于特定目的的适用性保证。有关详细信息,请参阅GNU通用公共许可证。
除非适用法律要求或书面同意,否则在任何情况下,除非法律要求或书面同意,否则任何版权所有者或其他修改和/或根据上述允许转让程序的当事人,不对您因使用或无法使用本程序(包括但不限于数据丢失或数据不准确、您或第三方遭受的损失或本程序与其他程序无法协同工作的损失)而遭受的损害负责,即使此类持有人或其他当事人已被告知此类损害的可能性。
[1]: 不包括CalculateFixture和SetupFixture。
Fit Shelf未经Fitnesse测试。不是旨在与Fit Library完全相同,只是要像书中描述的那样工作,但具有这里描述的特殊功能。