cocur / ea
测试的代码生成。因为有时候模拟并不总是奏效。
Requires (Dev)
- phpunit/phpunit: ~4.5
This package is auto-updated.
Last update: 2024-09-20 09:21:37 UTC
README
测试的代码生成。因为有时候模拟并不总是奏效。
由Florian Eckerstorfer在奥地利维也纳开发Florian Eckerstorfer。
功能
- 如果测试代码包含对
method_exists()
等函数的调用,则非常有用 - 生成具有方法和属性的类
- 根据属性生成设置器、获取器、hasser、issuer和adder
安装
您可以使用Composer安装Ea
$ composer require cocur/ea:dev-master
用法
Ea是为了生成测试代码而开发的。例如,如果您的测试代码包含对method_exists()
等函数的调用,典型的模拟可能不起作用。
您可以使用ClassFactory
生成一个类。第一个参数是类名,第二个参数是命名空间(可选)
$class = new ClassFactory('Foo', 'Foobar'); echo $class->generate();
将输出
namespace Foobar; class Foo { }
您可以使用PropertyFactory
创建属性,并使用addProperty()
方法将它们添加到类中。属性有名称、可见性(public
、protected
或private
),可以是静态的,并且可以具有默认值。
$property = new PropertyFactory('foo, 'public'); $property->isStatic(true); $property->setDefault('bar'); $property->generate(); // "public static $foo = 'bar';"
如果您调用setDefault()
方法,则即使您使用null
或false
作为参数,也会设置默认值。给定的值将用作默认值。如果您不调用setDefault()
,则不会设置默认值。您可以使用hasDefault()
检查属性是否有默认值,并使用removeDefault()
删除它。
或者,如果将字符串作为第一个参数传递给ClassFactory
的addProperty()
方法而不是PropertyFactory
的实例,则该方法的addProperty()
方法可以为您创建PropertyFactory
对象。第二个参数是可见性,第三个参数是静态的,第四个参数是默认值。如果您使用四个参数调用addProperty()
,则将设置默认值;如果不设置,则不会设置默认值。
$class->addProperty('foo', 'protected', false, null); $class->addProperty('bar', 'public', true); echo $class->generate();
将结果为
// ... protected $foo = null; public static $bar; // ...
使用MethodFactory
创建方法,并通过调用addMethod()
将其添加到类中。
$method = new MethodFactory('foo', 'protected'); $method->isStatic(false); $method->addArgument('foo', null, 21); $method->setBody('return 21+$foo'); $method->generate(); // "protected function foo($foo = 21) { return 21+$foo; }"
构造函数接受名称和可见性(public
、protected
、private
)作为参数,并通过isStatic()
设置方法是否应该是静态的。传递给setBody()
的代码将作为方法的主体返回。addArgument()
方法接受参数名称作为第一个参数,类型(如array
或stdClass
;默认为无)作为第二个参数,默认值作为第三个参数。如果提供了三个参数,则始终设置默认值;如果参数较少,则不设置默认值。
对于一些常见的属性访问方法,如设置器、获取器、hasser、adder和issuer,ClassFactory
提供了一些辅助方法,可以快速根据给定的PropertyFactory
创建这些方法。
$class->addGetter($property); $class->addSetter($property); $class->addIsser($property); $class->addHasser($property);
addAdder()
方法略有不同,因为它提供了更多的选项。第二个参数是一个bool
,表示是否应该通过键添加值。第三个参数是属性的单一名称。示例
$bars = PropertyFactory('bars'); $class->addAdder($bars, true, 'bar'); $class->generate(); // -> "public function addBar($key, $bar) { $this->bars[$key] = $bar; }"
除了生成代码外,您还可以使用Ea
的execute()
动态创建类。注意。Ea内部使用eval()
创建类。
Ea::create()->addClass($class)->execute();
许可
Ea适用于MIT许可证。有关完整的版权和许可信息,请参阅与源代码一起分发的LICENSE文件。