PHPUnit存根:来自map的默认返回值

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHPUnit存根:来自map的默认返回值脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了 PHPUnIT手册,通过以下示例,方法调用DOSomething(‘a’,’b’,’c’)将返回d并且方法调用doSomething(‘e’,’f’,’g’ )将返回h.

<?PHP
require_once 'SomeClass.PHP';

class Stubtest extends PHPUnit_Framework_TestCase
{
    public function testReturnValueMapStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this->getMockBuilder('SomeClass')
                     ->getMock();

        // Create a map of arguments to return values.
        $map = array(
          array('a','b','c','d'),array('e','f','g','h')
        );

        // Configure the stub.
        $stub->;method('doSomething')
             ->will($this->returnValueMap($map));

        // $stub->doSomething() returns different values dePEnding on
        // the PRovided arguments.
        $this->assertEquals('d',$stub->doSomething('a','c'));
        $this->assertEquals('h',$stub->doSomething('e','g'));
    } 
}
?>

是否还有一种方法可以定义这样的返回值映射,但是当特定输入参数没有特定的返回值时,使用认返回值?

解决方法

您可以使用returnCallback而不是returnValueMap,并重现值map正在执行的操作:

<?PHP
require_once 'SomeClass.PHP';

class StuBTest extends PHPUnit_Framework_TestCase
{
    public function testReturnValueMapStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this->getMockBuilder( 'SomeClass' )
            ->getMock();

        // Create a map of arguments to return values.
        $valueMap = array(
            array( 'a','d' ),array( 'e','h' )
        );

        $default = 'l';

        // Configure the stub.
        $stub->method( 'doSomething' )
            ->will( $this->returnCallback( function () use ( $valueMap,$default )
            {
                $arguments      = func_get_args();
                $parameterCount = count( $arguments );

                foreach( $valueMap as $map )
                {
                    if( !is_array( $map ) || $parameterCount != count( $map ) - 1 )
                    {
                        continue;
                    }

                    $return = array_pop( $map );
                    if( $arguments === $map )
                    {
                        return $return;
                    }
                }

                return $default;
            } ) );


        // $stub->doSomething() returns different values depending on
        // the provided arguments.
        $this->assertEquals( 'd',$stub->doSomething( 'a','c' ) );  
        $this->assertEquals( 'h',$stub->doSomething( 'e','g' ) );
        $this->assertEquals( 'l',$stub->doSomething( 'i','j','k' ) );
        $this->assertEquals( 'l',$stub->doSomething( 'any','arguments','at','all' ) );
    }
}

脚本宝典总结

以上是脚本宝典为你收集整理的PHPUnit存根:来自map的默认返回值全部内容,希望文章能够帮你解决PHPUnit存根:来自map的默认返回值所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。