大佬教程收集整理的这篇文章主要介绍了使用PHPUnit在Silex(mock closures)中进行测试,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的提供者:
<?php namespace Foo\Provider; use Silex\Application; use Silex\serviceProviderInterface; use Foo\Bar; class BarProvider implements serviceProviderInterface { public function register( Application $app ) { $app[ 'foo_bar' ] = $app->protect( function() use ( $app ) { return new Bar( $app ); } ); } public function boot( Application $app ) {} }
<?php namespace Foo; use Silex\Application; class Clazz { protected $bar; public function __construct( Application $app ) { $this->bar = $app[ 'foo_bar' ](); } }
这很好用.问题是我正在使用TDD(和phpUnit)进行开发,而且我无法正确测试Clazz类.
<?php namespace Foo\Test; use phpUnit_Framework_TESTCase; use Silex\Application; use Foo\Bar; use Foo\Clazz; class ClazzTest extends phpUnit_Framework_TESTCase { public function TESTConstruct() { $mock_bar = $this->getmock( 'Foo\Bar' ); $mock_app = $this->getmock( 'Silex\Application' ); $mock_app ->expects( $this->once() ) ->method( 'offsetGet' ) ->with( 'foo_bar' ) ->will( $this->returnValue( $mock_bar ) ); new Class( $mock_app ); } }
这里的问题在于Clazz类中$app [‘foo_bar’]之后的“()”.
当尝试执行测试时,我得到“php致命错误:函数名称必须是…中的字符串”错误.
我明白我不能用这种方式对课程进行单元测试,但我没有看到正确的方法.
我怎么能测试这个陈述(因为最后唯一复杂的陈述是$this-> bar = $app’foo_bar’;)?
<?php namespace Foo\Test; use phpUnit_Framework_TESTCase; use Silex\Application; use Foo\Bar; use Foo\Clazz; class ClazzTest extends phpUnit_Framework_TESTCase { public function TESTConstruct() { $mock_bar = $this->getmock( 'Foo\Bar' ); $mock_app = $this->getmock( 'Silex\Application' ); $mock_app ->expects( $this->once() ) ->method( 'offsetGet' ) ->with( 'foo_bar' ) ->will( $this->returnValue( function() use( $mock_bar ) { return $mock_bar; } ) ); new Class( $mock_app ); } }
而不是返回模拟,我返回一个返回模拟的闭包.这样我仍然可以在使用实际模拟时得到错误.
谁能告诉我这是否是正确的方法?
以上是大佬教程为你收集整理的使用PHPUnit在Silex(mock closures)中进行测试全部内容,希望文章能够帮你解决使用PHPUnit在Silex(mock closures)中进行测试所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。