Vis*_*021 3 php phpunit unit-testing mockery
我是 PHP Mockery 框架的新手。我有一个模拟函数executePrepared($arg1, $arg2, arg3),我调用它两次,但似乎不起作用,并在 PHPUnit 命令行中给出以下错误:
\n\nConfiguration read from C:\\xampp\\htdocs\\DatabaseTesting\\phpunit.xml\n\n..\xe2\x86\x90[31;1mE\xe2\x86\x90[0m\n\nTime: 47 ms, Memory: 3.25Mb\n\nThere was 1 error:\n\n\n1) Test\\Database\\Table\\TableTest::testinsertMany\n Mockery\\Exception\\NoMatchingExpectationException: No matching handler found for\n Mockery_0_Database_PGC::executePrepared(array(0=>\'ClayPipe\',1=>2000,2=>2100,3=>1\n ,4=>\'2000-01-01\',5=>\'{"1":"1","2":6,"3":8,"4":10}\',), "insert_assets", "\\Databas\n e\\Model\\Asset"). Either the method was unexpected or its arguments matched no ex\n pected argument list for this method\nRun Code Online (Sandbox Code Playgroud)\n\n我的测试功能如下:
\n\n public function testinsertMany() {\n $this->PGCMock->shouldReceive(\'executePrepared\')->twice()->withArgs(array(\n[array(\'Clay Pipe\',2000,2100,1,\'2000-01-01\',\'{"1":"1","2":6,"3":8,"4":10}\'), \'insert_assets\', \'\\Database\\Model\\Asset\'],\n[array(\'Main Street\',1000,1100,0,\'2000-02-01\',\'{"1":"1","2":6,"3":8,"4":10}\'), \'insert_assets\', \'\\Database\\Model\\Asset\']))\n->andReturn($expectedResult1);\n\n$data1 = array(\'name\'=>\'Clay Pipe\',\n \'hist_cost\' => 2000,\n \'val_cost\' => 2100,\n \'val_method\' => 1,\n \'service_date\' => \'2000-01-01\',\n \'tags\' => \'{"1":"1","2":6,"3":8,"4":10}\'\n );\n\n $data2 = array(\'name\'=>\'Main Street\',\n \'hist_cost\' => 1000,\n \'val_cost\' => 1100,\n \'val_method\' => 0,\n \'service_date\' => \'2000-02-01\',\n \'tags\' => \'{"1":"1","2":6,"3":8,"4":10}\'\n ); \n\n $actualResult = $this->tableMock->insertMany(array($data1,$data2));\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我不明白这里出了什么问题。我使用传递的参数调用模拟函数两次()的语法是否错误?有人可以在这里指导我吗?
\ntwice()当相同的调用(包括参数)预计执行 2 次时应使用。看起来您想检查两个连续的调用,每个调用都有不同的参数。
如果是这样的话,这将起作用:
$this->PGCMock
->shouldReceive('executePrepared')
->once()
->ordered()
->withArgs([
array('Clay Pipe',2000,2100,1,'2000-01-01','{"1":"1","2":6,"3":8,"4":10}'),
'insert_assets', '\Database\Model\Asset'
])
->andReturn($result1);
$this->PGCMock
->shouldReceive('executePrepared')
->once()
->ordered()
->withArgs([
array('Main Street',1000,1100,0,'2000-02-01','{"1":"1","2":6,"3":8,"4":10}'),
'insert_assets', '\Database\Model\Asset'
])
->andReturn($result2);
Run Code Online (Sandbox Code Playgroud)