【发布时间】:2016-01-30 16:58:10
【问题描述】:
我的问题是。我有一门我想测试的课程(myClass)。在 myClass 中,有一个函数调用了 myClass 中的私有函数。
我知道我无法测试私有函数。是否可以告诉 phpunit 调用另一个函数而不是私有函数?
示例
$this->testclass 现在是我要测试的类
$this->testclass = new \stdClass();
$this->testclass->mock = $this->getMockBuilder('myClass')->getMock();
在我的测试用例之外,我创建了一个假类。
$this->mockextended = new \stdClass();
$this->mockextended->mock = new MOCKEXTENDEDCLASSES();
在$this->mockextended 我有一个公共功能。
我要测试的功能
public function TestMe(){
$this->somePrivateFunctioniHate(); <==== this is the pain in my ass
}
还有私有函数
private function somePrivateFunctioniHate(){
//come code
}
我想做的是。函数 TestMe 正在调用一个私有函数。
是否可以告诉 phpunit 覆盖私有函数并调用 $this->mockextended; 中的另一个函数
我试过这样。
$this->testclass->somePrivateFunctioniHate() = $this->mockextended->theWholeNewPrivateFunction()
只有这给了我一个很好的错误。我以前这样做过,它奏效了。这么称呼它
编辑 对于不理解我的问题的人。 我有另一个调用另一个类的函数。我不想在我的测试中有另一个类,所以我在我的测试用例之外创建了一个假类。插入了与函数想要包含的类相同的函数。是这样的吗
$this->testclass->chunks = new \stdClass();
//MOCKchunckTpl is the fake class outside my testcase
$this->testclass->chunks->config = new MOCKchunkTpl();
这行得通。每当一个函数想要调用$this->testclass->chunks->config->Somefunction(); 时,它都会被重定向到我的假类。
但是 当我尝试对调用私有函数的函数执行相同操作时。就像$this->testclass->somePrivateFunctioniHate() = $this->mockextended->theWholeNewPrivateFunction() 一样,它给出了一个很好的错误
Fatal error: Can't use method return value in write context in
【问题讨论】:
-
为什么你总是先实例化一个
new \stdClass(),然后再用你的模拟填充同一个变量? -
我希望它像 $object->otherobject->anotherobject->thisonetoo 一样使用它......
-
但是您正在立即覆盖该变量。在这两种情况下,
stdClass会丢失并且实例化毫无意义。 -
好吧。也许会的。但这不是我问的问题
-
这就是我在 cmets 中提到这一点的原因