使用PHPUnit在Silex(mock closures)中进行测试

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用PHPUnit在Silex(mock closures)中进行测试脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
开始和Silex合作,这很棒.尝试对我的课程进行适当的单元测试时会出现问题.具体地说是封闭:(
在以下几行中,我解释了我的问题,看看你们是否有人知道如何解决它.
请不要专注于语法,而应关注测试问题本身.

我有这样的提供者:

<?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 ) {}
}

然后我需要获取foo_bar元素的实例:

<?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,请注明来意。