猿问

PHPunit:如何从外部函数更改 Mock 对象的属性

我正在使用 Symfony 并且我正在尝试测试“Student”类中的 addStudentCard 函数,该函数将“StudentCard”对象添加到 $studentCards 数组集合属性中,并将“Student”对象添加到“StudentCard”类中的 $student 属性中。我是这样做的:


class StudentCard {

  private $student;

  public function getStudent();

  public function setStudent();

  //...

}


class Student {

  private $studentCards;

  public function getStudentCards();

  public function addStudentCard(StudentCard $studentCard){

    $studentCard->setStudent($this);

    $this->studentCards[] = $studentCard;

    return $this;

  //...

}

我想要实现的是使用 MockBuilder 测试此 addStudentCard 函数,我已经通过以下方式在不使用模拟的情况下完成了此操作:


class StudentTest extends AbstractTestCase {

  public function testAddStudentCard(){

    $studentCard = new StudentCard();

    $student = new Student();

    $student->addStudentCard($studentCard);

    $student->assertSame($studentCard, $student->getStudentCards()[0]);

    $student->assertSame($student, $studentCard->getStudent());

}

这按预期工作没有问题。


我想要的是替换该行:


$studentCard = new StudentCard();

像这样:


$studentCard = $this->getMockBuilder(StudentCard::class)->getMock();

但我得到的是错误:断言 null 与 Student 类的对象相同。


森栏
浏览 173回答 2
2回答
随时随地看视频慕课网APP
我要回答