balihoo / phockito-unit-php-di
该软件包已被弃用且不再维护。未建议替代软件包。
简化Phockito、PHP-DI与PHP Unit结合的库
1.0.0
2013-10-17 21:38 UTC
Requires
- php: >=5.3.0
- balihoo/phockito-unit: 1.*
- hafriedlander/phockito: dev-master
- mnapoli/php-di: 3.*
- mnapoli/phpdocreader: 1.*
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2023-04-24 08:22:28 UTC
README
PhockitoUnit PHP-DI旨在将PHP Unit与Phockito模拟框架和PHP-DI依赖注入框架结合在一起,受到全球PHP开发者的赞誉。这是对PhockitoUnit库的PHP-DI特定增强。其功能相对简单
- 自动生成测试所需的模拟
- 自动生成测试所需的间谍
- 自动启用Hamcrest匹配
- 自动将模拟注册到DI容器中
就是这样!
PhockitoUnit PHP-DI实战
以下是一个经典的PHP Unit测试,使用Phockito模拟依赖项
class SomeTest extends PHPUnit_Framework_TestCase { public function setUp(){ Phockito::include_hamcrest(); } public function testSomeMethod(){ /** @var SomeDependency $mockDependency **/ $mockDependency = Phockito::mock('SomeDependency'); Phockito::when($mockDependency->dependentMethod(anything()))->return("value"); $instance = new ThingThatNeedsDependency($mockDependency); $this->assertEquals("value", $instance->methodThatUsesDependency()); } public function testSomeMethodWhenSomeDependencyThrows(){ /** @var SomeDependency $mockDependency **/ $mockDependency = Phockito::mock('SomeDependency'); Phockito::when($mockDependency->dependentMethod(anything()))->throw(new Exception("Some error")); $instance = new ThingThatNeedsDependency($mockDependency); try{ $instance->methodThatUsesDependency()); $this->fail("Expected exception not thrown"); } catch(Exception $ex) { $this->assertEquals("Some error", $ex->getMessage()); } } }
你肯定遇到过或编写过至少类似这个结构的单元测试。PhockitoUnit通过消除一些常见的样板代码简化了这个结构,如下所示
class SomeTest extends \PhockitoUnit\PhockitoUnitTestCase { /** @var SomeDependency **/ protected $mockDependency; public function testSomeMethod(){ Phockito::when($this->mockDependency->dependentMethod(anything()))->return("value"); $instance = new ThingThatNeedsDependency($mockDependency); $this->assertEquals("value", $instance->methodThatUsesDependency()); } public function testSomeMethodWhenSomeDependencyThrows(){ Phockito::when($this->mockDependency->dependentMethod(anything()))->throw(new Exception("Some error")); $instance = new ThingThatNeedsDependency($mockDependency); try{ $instance->methodThatUsesDependency()); $this->fail("Expected exception not thrown"); } catch(Exception $ex) { $this->assertEquals("Some error", $ex->getMessage()); } } }
这不是一个巨大的变化,但它非常有帮助,消除了类名拼写错误、类重命名重构等可能性。在更高级的场景中,当你模拟领域对象图时,它可以让你更容易编写更多的测试。更多的测试意味着更广泛的覆盖意图。以下是一个设置图并使用间谍的示例
class FamilyTest extends \PhockitoUnit\PhockitoUnitTestCase { /** @var Child **/ protected $mockChild1; /** @var Child **/ protected $spyChild2; /** @var Parent **/ protected $mockParent; public function setUp(){ parent::setUp(); Phockito::when($this->mockParent->getEledestChild())->return($this->mockChild1); Phockito::when($this->mockParent->getYoungestChild())->return($this->spyChild1); } public function testGetEldestChildNickName(){ Phockito::when($this->mockChild1->getNickName())->return("Oldie"); $family = new Family(array($this->mockParent)); $this->assertEquals("Oldie", $family->getElestChildNickName()); } public function testGetYoungestchildFullName(){ Phockito::when($this->spyChild2->getFirstName())->return("Youngy"); Phockito::when($this->spyChild2->getLastName())->return("McYoung"); $family = new Family(array($this->mockParent)); $this->assertEquals("Youngy McYoung", $family->testGetYoungestchildFullName()); } }