PHPUnit错误致命错误:调用未定义的方法Mock_Game_073a8e20::method()
我目前正在观看一个使用PHP单元的指南,但当涉及到模拟时,我总是会遇到这个错误 游戏课PHPUnit错误致命错误:调用未定义的方法Mock_Game_073a8e20::method(),php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我目前正在观看一个使用PHP单元的指南,但当涉及到模拟时,我总是会遇到这个错误 游戏课 class Game { protected $title; protected $imagePath; protected $ratings; public function getAverageScore(){ $ratings = $this->getRatings(); $numRatings = count($ratings);
class Game {
protected $title; protected $imagePath; protected $ratings;
public function getAverageScore(){
$ratings = $this->getRatings(); $numRatings = count($ratings);
$total = 0;
if($numRatings == 0){ return null; }
foreach($ratings as $rating){
$total = $rating->getScore();
}
return $total / $numRatings;
}
public function isRecommended()
{
return $this->getAverageScore() >= 3;
}
public function getTitle(){ return $this->title; }
public function setTitle($value){ $this->title = $value; }
public function getImagePath(){ if($this->imagePath == null){ return '/images/placeholder.jpg'; } return $this->imagePath; }
public function setImagePath($value){ return $this->imagePath = $value; }
public function getRatings(){ return $this->ratings; }
public function setRatings($value){ return $this->ratings = $value; }
}
测试用例
public function testAverageScore_With6And8_Returns7(){
$ratings1 = $this->getMock('Rating', ['getScore']);
$ratings1->method('getScore')
->willReturn(6);
$ratings2 = $this->getMock('Rating', ['getScore']);
$ratings2->method('getScore')
->willReturn(8);
$game = $this->getMock('Game', ['getRatings']);
$game->method('getRatings')
->willReturn([$ratings1, $ratings2]);
$this->assertEquals(7, $game->getAverageScore());
}
错误:
E:\xampp\htdocs\gamebook>phpunit src/Test/Unit/GameTest.php phpunit
3.7.21塞巴斯蒂安·伯格曼
。。。致命错误:调用未定义的方法
中的Mock_Rating_5c2598e3::方法()
第40行的E:\xampp\htdocs\gamebook\src\Test\Unit\GameTest.php
调用堆栈:
0.0670 126024 1. {main}()E:\xampp\php\phpunit:0
0.1800 361592 2. PHPUnit_TextUI_命令::main()E:\xampp\php\PHPUnit:46
0.1800 365008 3. PHPUnit\u TextUI\u Command->run()E:\xampp\php\pear\PHPUnit\TextUI\Command.php:129
0.3070 1401944 4. PHPUnit\u TextUI\u TestRunner->doRun()E:\xampp\php\pear\PHPUnit\TextUI\Command.php:176
0.3200 1614568 5. PHPUnit\u Framework\u TestSuite->run()E:\xampp\php\pear\PHPUnit\TextUI\TestRunner.php:349
0.3810 1873016 6. PHPUnit\u Framework\u TestSuite->runTest()E:\xampp\php\pear\PHPUnit\Framework\TestSuite.php:745
0.3810 1873016 7. PHPUnit\u Framework\u TestCase->run()E:\xampp\php\pear\PHPUnit\Framework\TestSuite.php:775
0.3810 1872984 8. PHPUnit\u Framework\u TestResult->run()E:\xampp\php\pear\PHPUnit\Framework\TestCase.php:776
0.3820 1873600 9. PHPUnit\u Framework\u TestCase->runBare()E:\xampp\php\pear\PHPUnit\Framework\TestResult.php:648
0.3830 1904096 10. PHPUnit\u Framework\u TestCase->runTest()E:\xampp\php\pear\PHPUnit\Framework\TestCase.php:831
0.3830 1904592 11. ReflectionMethod->invokeArgs()E:\xampp\php\pear\PHPUnit\Framework\TestCase.php:976
0.3830 1904704 12. GameTest->testAverageScore_与6和8_返回7()
E:\xampp\php\pear\PHPUnit\Framework\TestCase.php:976
从PHPUnit 5.4开始,函数getMock已被弃用: PHPUnit\Framework\TestCase::getMock()方法已被弃用。 请使用PHPUnit\Framework\TestCase::createMock()或 改为PHPUnit\Framework\TestCase::getMockBuilder() 您的代码中不包含评级类,但如果包含评级类,您会这样模拟它:
$ratings1 = $this->createMock('Rating');
$ratings1->method('getScore')
->willReturn(6);
此外,在上一条模拟语句中,您正在传入两个参数,但函数:
public function getRatings(){ return $this->ratings; }
没有两个参数,它必须是:
public function getRatings($rating1, $rating2) {
return ($rating1->getScore() + $rating2->getScore())/2;
}
然后,您不模拟该调用,而是使用模拟的评级对象来调用它:
$game = new Game();
$answer = $game->getRatings($ratings1, $ratings2);
$this->assertSame(7,$answer);
我想你的意思是让getRatings获取一系列评级,但我把它留给你去编码…奇怪的是,这对于模拟Rate类来说很好,而对于Game类来说则不行。检查类名是否正确(是否使用命名空间?)