Тестирование частных методов, не работающих

Вот мой тестовый класс;

<?php namespace stats\Test; use stats\Baseball; class BaseballTest extends \PHPUnit_Framework_TestCase { public function setUp() { $this->instance = new Baseball(); } public function tearDown() { unset($this->instance); } public function testOps() { $obp = .363; $slg = .469; $ops = $this->instance->calc_ops($obp, $slg); //line 23 $expectedops = $obp + $slg; $this->assertEquals($expectedops, $ops); } } 

И это мой Бейсбольный класс;

 <?php namespace stats; class Baseball { private function calc_ops($slg,$obp) { return $slg + $obp; } } 

И я продолжаю получать эту ошибку, когда я запускаю свои тесты;

 Fatal error: Call to private method stats\Baseball::calc_ops() from context 'stats\Test\BaseballTest' in /media/sf_sandbox/phpunit/stats/Test/BaseballTest.php on line 23 

Это только учебник, за которым я следую. Но он не работает, так что это расстраивает, потому что я точно следую ему.

Related of "Тестирование частных методов, не работающих"

Вы не можете проверить частный метод, вы можете использовать обходной путь и вызывать его посредством отражения, как описано в этой статье .

Это рабочий пример, основанный на статье:

 class BaseballTest extends \PHPUnit_Framework_TestCase { public function setUp() { $this->instance = new Baseball(); } public function tearDown() { unset($this->instance); } public function testOps() { $obp = .363; $slg = .469; // $ops = $this->instance->calc_ops($obp, $slg); //line 23 $ops = $this->invokeMethod($this->instance, 'calc_ops', array($obp, $slg)); $expectedops = $obp + $slg; $this->assertEquals($expectedops, $ops); } /** * Call protected/private method of a class. * * @param object &$object Instantiated object that we will run method on. * @param string $methodName Method name to call * @param array $parameters Array of parameters to pass into method. * * @return mixed Method return. */ public function invokeMethod(&$object, $methodName, array $parameters = array()) { $reflection = new \ReflectionClass(get_class($object)); $method = $reflection->getMethod($methodName); $method->setAccessible(true); return $method->invokeArgs($object, $parameters); } с class BaseballTest extends \PHPUnit_Framework_TestCase { public function setUp() { $this->instance = new Baseball(); } public function tearDown() { unset($this->instance); } public function testOps() { $obp = .363; $slg = .469; // $ops = $this->instance->calc_ops($obp, $slg); //line 23 $ops = $this->invokeMethod($this->instance, 'calc_ops', array($obp, $slg)); $expectedops = $obp + $slg; $this->assertEquals($expectedops, $ops); } /** * Call protected/private method of a class. * * @param object &$object Instantiated object that we will run method on. * @param string $methodName Method name to call * @param array $parameters Array of parameters to pass into method. * * @return mixed Method return. */ public function invokeMethod(&$object, $methodName, array $parameters = array()) { $reflection = new \ReflectionClass(get_class($object)); $method = $reflection->getMethod($methodName); $method->setAccessible(true); return $method->invokeArgs($object, $parameters); } 

Публикация. Этот метод является общедоступным и доступен во всех подклассах.
Protected – свойство method / function / доступно родительскому классу и всем наследующим классам или мы называем их подклассами или дочерними классами.
Private – метод является закрытым и доступен только для родительского класса / базового класса.

Вы можете тестировать только частные методы внутри класса и вызывать этот открытый метод, используя частный метод.

 class Baseball { public function testMethod() { $a = 1; $b = 2; return $this->calc_ops($a, $b); } private function calc_ops($slg,$obp) { return $slg + $obp; } }