cscfa_tool_division/phpunit_test_helper

dev-master / 1.0.x-dev 2017-01-29 15:54 UTC

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方法

此方法定义给定属性中包含的值。