cscfa_tool_division / phpunit_test_helper
Requires
- phpunit/phpunit: 5@stable
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-23 13:58:03 UTC
README
ObjectTestCase
ObjectTestCase 是 phpunit TestCase 的子类,提供了创建
- ObjectCall 实例的方法 (newObjectCall() 方法),
- SetterCall 实例的方法 (newSetterCall() 方法),
- GetterCall 实例的方法 (newGetterCall() 方法)
ObjectTestTrait
此 trait 用于提供测试对象实例的辅助方法。
获取实例属性值
要获取实例属性值,此 trait 提供了一个 getPropertyValue(instance, property) 方法。实例作为第一个参数给出,属性名作为第二个参数。
此方法将创建一个反射,设置属性可访问并返回其值。如果第一个参数不是对象或第二个参数不是对象属性,将抛出异常。
$instance = new MyInstance(); $instance->setName('instance_name'); $value = $ObjectTest->getPropertyValue($instance, 'name'); echo $value; // return 'instance_name'
设置实例属性值
要设置实例属性值,此 trait 提供了一个 setPropertyValue(instance, property, value) 方法。实例作为第一个参数给出,属性名作为第二个参数,值作为第三个参数。
此方法将创建一个反射,设置属性可访问并初始化其值。如果第一个参数不是对象或第二个参数不是对象属性,将抛出异常。
$instance = new MyInstance(); $instance->setName('instance_name'); $value = $ObjectTest->getPropertyValue($instance, 'name'); echo $value; // return 'instance_name'
ObjectCall
ObjectCall 允许测试带有参数和返回值的函数调用。它可以定义要调用的方法名称和实例。此类需要一个 \PHPUnit_Framework_Assert 实例来执行测试。
$instance = new MyInstance(); $caller = new ObjectCall($currentTestCase); $call->call('setName') ->on($instance) ->with(array('instance_name')) ->mustReturn($instance, true) ->resolve('Return value mismatch');
resolve 方法
此方法将调用方法并验证结果。如果函数调用失败,将抛出 \RuntimeException,如果方法不存在,将抛出 MethodNotFoundException,如果要调用的方法名称或实例为空,将抛出 RequiredArgumentException。
它接受断言失败消息作为可选参数。
mustReturn 方法
此方法定义期望的函数返回值。第二个参数定义期望值和返回值是否必须相等或相同。要定义值为相同,请将 true 作为第二个参数给出,或为 false。请注意,第二个参数是可选的,默认为 false。
with 方法
此方法定义在调用时传递给方法的参数。它必须是一个数组。要向方法传递无参数,只需不调用 with 方法即可。
on 方法
此方法定义必须调用该方法的对象。
call 方法
此方法定义要调用的方法名称。
mustThrow 方法
此方法定义被调用的方法必须抛出异常。
$instance = new MyInstance(); $caller = new ObjectCall($currentTestCase); $call->call('throw') ->on($instance) ->with(array('instance_name')) ->mustThrow(\Exception::class, 500, 'Th throw method was called') ->resolve();
SetterCall
SetterCall 是 ObjectCall 的扩展,允许测试属性注入。
$instance = new MyInstance(); $call->call('setName') ->on($instance) ->with(array('instance_name')) ->mustReturn($instance) ->inject('instance_name', false, function($value){return $value;}) ->injectIn('name') ->resolve();
inject 方法
此方法允许提供一个预期将被注入实例属性中的值。作为第二个参数给出的布尔值告诉是否必须通过相同(true)或相等(false)来测试等价性。最后,可以提供一个 Callable 作为第三个参数,在等价性验证之前对值进行预处理。
它返回一个 InjectExpression 实例。
injectIn 方法
此方法定义存储值的属性。它是 InjectExpression 实例的方法,并返回父 SetterCall 实例。
对于多个实例设置,可以在injectIn方法中提供另一个实例作为第二个参数,以指定必须注入值的其他实例。
$instance = new MyInstance(); $facade = new MyFacade($instance); $call->call('setName') ->on($facade) ->with(array('instance_name')) ->mustReturn($facade) ->inject('instance_name', false, function($value){return $value;}) ->injectIn('name', $instance) ->resolve();
getter调用
getter调用是ObjectCall的扩展,允许测试属性的getter。
$instance = new MyInstance(); $name = 'instance_name'; $call->call('getName') ->on($instance) ->mustReturn($name) ->from('instanceName') ->thatContain($name) ->resolve();
from方法
此方法定义getter预期返回值的属性。它只接受字符串值,如果提供非字符串值,将抛出TypeException异常。
thatContain方法
此方法定义给定属性中包含的值。