我的问题是。我有一个类,我只想测试我要测试的函数是在我要测试的类中调用一个私有函数。 private函数调用另一个类函数。
我想模拟私有函数,所以我可以将值返回给调用private的公共函数。我通过创建一个具有相同功能但具有值的新类来尝试它,我希望函数返回。
这是我的代码
//function i want to test
public function checksomedata($objectID){
$config = $this->theprivatefunction($objectID,'id');
return $config;
}
我要模拟的私人功能
private function theprivatefunction($objectID,'id'){
//do some code here. nothing special
//return the value here
}
这是我的测试
public function testCheckObjectAcces() {
$objectID = '12';
$this->testclass->checksomedata($objectID);
}
这是我想要打电话给我的班级返回一些价值。
public function theprivatefunction(){
$result = "THIS VALUE NEEDS TO BE RETURNED";
return $result;
}
和我的setUP,我试图模拟priavte函数
$this->mockextended = new \stdClass();
$this->mockextended = new MOCKEXTENDEDCLASSES();
$this->testclass->theprivatefunction() = $this->mockextended->theprivatefunction();
在我的setUp中,我希望代码认为$this->testclass->theprivatefunction()
是$this->mockextended->theprivatefunction();
因此,当函数调用私有函数时,需要将其重定向到$this->mockextended->theprivatefunction();
答案 0 :(得分:3)
这个问题有两种方法:
stdin
读取。据我所知,你不能在测试中为stdin分配一个值,所以我不得不将读取分离到stdin
到一个单独的方法。然后,我创建了一个测试存根,它覆盖了父方法以返回预定义的值。这使您可以控制通常没有的私有方法。