joomla/test

Joomla 测试助手包

3.0.0 2023-10-08 14:37 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License

此包是工具集合,可简化单元测试的一些工作。

TestHelper

Joomla\Test\TestHelper 是一个静态助手类,可在使用 PHPUnit 进行单元测试时减轻重复性工作的痛苦。

模拟

有两种方法可以帮助使用 PHPUnit 模拟对象。

TestHelper::assignMockCallbacks

此助手方法提供了一种批量配置模拟回调的简单方式。

use Joomla\Test\TestHelper;

class FooTest extends \PHPUnit_Framework_TestCase
{
	public function testFoo()
	{
		// Create the mock.
		$mockFoo = $this->getMock(
			'Foo',
			// Methods array.
			array(),
			// Constructor arguments.
			array(),
			// Mock class name.
			'',
			// Call original constructor.
			false
		);

		$mockCallbacks = array(
			// 'Method Name' => <callback>
			'method1' => array('\mockFoo', 'method1'),
			'method2' => array($this, 'mockMethod2'),
		);

		TestHelper::assignMockCallbacks($mockFoo, $this, $mockCallbacks);
	}

	public function mockMethod2($value)
	{
		return strtolower($value);
	}
}

TestHelper::assignMockReturns

此助手方法提供了一种批量配置模拟返回值的简单方式。

use Joomla\Test\TestHelper;

class FooTest extends \PHPUnit_Framework_TestCase
{
	public function testFoo()
	{
		// Create the mock.
		$mockFoo = $this->getMock(
			'Foo',
			// Methods array.
			array(),
			// Constructor arguments.
			array(),
			// Mock class name.
			'',
			// Call original constructor.
			false
		);

		$mockReturns = array(
			// 'Method Name' => 'Canned return value'
			'method1' => 'canned result 1',
			'method2' => 'canned result 2',
			'method3' => 'canned result 3',
		);

		TestHelper::assignMockReturns($mockFoo, $this, $mockReturns);
	}
}

反射

有三种方法可以帮助反射。

TestHelper::getValue

TestHelper::getValue 方法允许您获取任何受保护或私有属性的值。

use Joomla\Test\TestHelper;

class FooTest extends \PHPUnit_Framework_TestCase
{
	public function testFoo()
	{
		$instance = new \Foo;

		// Get the value of a protected `bar` property.
		$value = TestHelper::getValue($instance, 'bar');
	}
}

此方法应谨慎使用。通常更合适使用 PHPUnit 的 assertAttribute* 方法。

TestHelper::setValue

TestHelper::setValue 方法允许您设置任何受保护或私有属性的值。

use Joomla\Test\TestHelper;

class FooTest extends \PHPUnit_Framework_TestCase
{
	public function testFoo()
	{
		$instance = new \Foo;

		// Set the value of a protected `bar` property.
		TestHelper::setValue($instance, 'bar', 'New Value');
	}
}

此方法对于向对象注入值以便测试 getter 方法非常有用。

TestHelper::invoke

TestHelper::invoke 方法允许您调用任何受保护或私有方法。指定对象和方法名称后,任何剩余的参数都会传递给被调用的方法。

use Joomla\Test\TestHelper;

class FooTest extends \PHPUnit_Framework_TestCase
{
	public function testFoo()
	{
		$instance = new \Foo;

		// Invoke the protected `bar` method.
		$value1 = TestHelper::invoke($instance, 'bar');

		// Invoke the protected `bar` method with arguments.
		$value2 = TestHelper::invoke($instance, 'bar', 'arg1', 'arg2');
	}
}

通过 Composer 安装

"joomla/test": "~2.0" 添加到 composer.json 中的 require 块,然后运行 composer install

{
	"require": {
		"joomla/test": "~2.0"
	}
}

或者,您可以直接在命令行运行以下命令

composer require joomla/test "~2.0"