metaclass-nl/fit-shelf

PHP5中重新实现了Rick Mugridge和Ward Cunningham所著《Fit for developing Software》一书中描述的Fit库功能

v0.5 2013-11-16 16:25 UTC

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允许测试访问测试对象上的任意属性和方法。它没有授权的概念。允许最终用户运行自行修改的测试可能会暴露敏感数据、引发致命错误,并使系统处于未定义状态。

安装和配置

特殊功能

  1. 混合数据类型

    为了支持PHP的混合数据类型,包含了一个特殊的适配器:PHPFIT_TypeAdapter_PhpTolerant.php。由于适配器旨在与任何类型一起工作,因此当缺少类型信息时,它会被用作回退。在实践中,这意味着在大多数情况下,您可以简单地运行任何测试,并忘记关于数据类型的问题。

    然而,如果您确实提供了类型信息,此适配器将委托给相应的PhpFit数据类型适配器。

  2. 支持尚未定义的属性和__get、__set和__call魔法方法

    Fit库支持在测试中直接使用被测系统的属性和方法。使用DoFixture,如果方法或属性不存在,则会加载一个固定装置。但在PHP5中,如果您实现了正确的魔法方法,您可能可以获取或设置不存在的属性或调用方法。您还可以设置未定义的属性。

    为了允许您无条件地获取、设置和调用,Shelf的DoFixture支持不默认加载固定装置的'get'、'set'和'call'固定装置方法。

  3. 适应应用程序元模型

    在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完全相同,只是要像书中描述的那样工作,但具有这里描述的特殊功能。