【发布时间】:2015-07-09 09:30:17
【问题描述】:
这是我的测试课;
<?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
这只是我正在关注的一个教程。但它不起作用,所以这很令人沮丧,因为我完全按照它。
【问题讨论】:
-
你不能测试私有方法。它必须是公开的或受保护的。
-
我通过测试类中的公共方法对其进行测试。也许我的标题有点误导
-
@mike3875 您不能从对象外部访问私有或受保护的方法。他们需要公开......
-
@mike3875 您的测试方法是
public,是的,但是您尝试访问Baseball的private方法。如果call_ops是private,你不能做$this->instance->calc_ops($obp, $slg),因为你不在对象中 -
在仔细查看教程后,我可以看出他为了表达自己的观点而略微捏造了它。他只是假装它会起作用。有点烦人。过了一会儿,他继续创建一个 invokeMethod “因为它更好”
标签: php unit-testing phpunit