Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit-mockry::mock vs mockry::namedMocks_Php_Oop_Phpunit_Mockery - Fatal编程技术网

PHPUnit-mockry::mock vs mockry::namedMocks

PHPUnit-mockry::mock vs mockry::namedMocks,php,oop,phpunit,mockery,Php,Oop,Phpunit,Mockery,我正在用mockry编写PHPUnit测试(phpv5.6.32,PHPUnit 3.7.21,mockry dev master),发现了一些关于使用mockry::mock和mockry::namedMocks的不理解的地方 我的代码如下,问题如下: 我在LegendTest.php中使用信号收集对象的mockry::namedMock()而不是mockry::mock()是否正确 关于,我希望第一个参数是类名(SignalsCollection),第二个参数应该是extends语句(\Ar

我正在用mockry编写PHPUnit测试(phpv5.6.32,PHPUnit 3.7.21,mockry dev master),发现了一些关于使用
mockry::mock
mockry::namedMocks
的不理解的地方

我的代码如下,问题如下:

  • 我在LegendTest.php中使用信号收集对象的
    mockry::namedMock()
    而不是
    mockry::mock()
    是否正确
  • 关于,我希望第一个参数是类名(
    SignalsCollection
    ),第二个参数应该是extends语句(
    \ArrayObject
    )-但在我的例子中,我得到了一个错误:
    mockry\Exception\BadMethodCallException:Received Charts\SignalsCollection::getIterator(),但是没有指定期望值
    ,所以我只给出一个参数,这很好。为什么?我做错了什么?我很困惑
  • 我是否错过了这个测试用例中的某些内容,或者我应该做一些不同的事情来改进测试
  • Signal.php:

    class Signal
    {
        protected $id = 0;
        protected $colName = '';
        protected $tableName = '';
    
        public function getId()
        {
            return $this->id;
        }
    
        public function setColName($colName)
        {
            $this->colName = $colName;
    
            return $this;
        }
    
        public function setTableName($tableName)
        {
            $this->tableName = $tableName;
    
            return $this;
        }
    }
    
    SignalsCollection.php:

    class SignalsCollection extends \ArrayObject
    {
    }
    
    Legend.php

    class Legend
    {
        protected $signalsCollection = null;
        protected $graphModel = null;
    
        public function __construct(SignalsCollection $signalsCollection, GraphModel $graphModel)
        {
            $this->signalsCollection = $signalsCollection;
            $this->graphModel = $graphModel;
        }
    
        public function getSignalsCollection()
        {
            return $this->signalsCollection;
        }
    
        public function removeSignal(Signal $signal)
        {
            foreach ($this->signalsCollection as $key => $item) {
                if ($item->getId() === $signal->getId()) {
                    $this->signalsCollection->offsetUnset($key);
                    break;
                }
            }
        }
    }
    
    LegendTest.php:

    class LegendTest extends \PHPUnit_Framework_TestCase 
    {
        protected function tearDown()
        {
            parent::tearDown();
            Mockery::close();
        }
    
        public function testRemoveSignal()
        {
            $testSignal = Mockery::mock('\Charts\Signal')
                ->shouldReceive('setColName', 'setTableName')
                ->andReturn(Mockery::self())
                ->mock();
            $testSignal
                ->setColName('testColumnName')
                ->setTableName('testTableName');
    
            $testSignalSecond = Mockery::mock('\Charts\Signal')
                ->shouldReceive('setId', 'setColName', 'setTableName')
                ->andReturn(Mockery::self())
                ->mock();
            $testSignalSecond
                ->setId(1)
                ->setColName('testColumnName')
                ->setTableName('testTableName');
    
            $signalsCollection = Mockery::namedMock('\Charts\SignalsCollection')
                ->shouldReceive('append', 'offsetUnset')
                ->andReturn(Mockery::self())
                ->mock();
            $signalsCollection
                ->append($testSignal)
                ->append($testSignalSecond);
    
            $legend = new Legend($signalsCollection, Mockery::mock('\Charts\GraphModel'));
            $this->assertEquals($signalsCollection, $legend->getSignalsCollection());
    
            $legend->removeSignal($testSignalSecond);
            $signalsCollection->offsetUnset(1);
    
            $this->assertEquals( $signalsCollection, $legend->getSignalsCollection() );
        }
    }