Object phpunit:将的对象参数与模拟对象的()进行比较

Object phpunit:将的对象参数与模拟对象的()进行比较,object,mocking,phpunit,Object,Mocking,Phpunit,我试图将一个对象作为“with”的参数与我的模拟对象进行比较。 当我比较预期和实际的var\u dump时,它们看起来是等价的。 我的直觉是,我在使用参数的->中做错了什么。 提前谢谢 我的测试代码 public function testAddEntry() { $expected = new Entry(); var_dump($expected); $dbRef = $this->getMock('EntriesDAO'); $dbRef->ex

我试图将一个对象作为“with”的参数与我的模拟对象进行比较。 当我比较预期和实际的
var\u dump
时,它们看起来是等价的。 我的直觉是,我在使用参数的
->中做错了什么。
提前谢谢

我的测试代码

public function testAddEntry()
{
    $expected = new Entry();
    var_dump($expected);
    $dbRef = $this->getMock('EntriesDAO');
    $dbRef->expects($this->once())->method('insert')
        ->with($expected);
    $actual = EntryHelper::addEntry($dbRef, $req);
要测试的函数代码

static function addEntry($iDao, $req)
{
$actual = new Entry();
var_dump($actual);
$actual->newId = $iDao->insert($actual);
控制台输出

class Entry#212 (4) {
  public $id =>
  NULL
  public $content =>
  string(0) ""
  public $date =>
  string(0) ""
  public $userId =>
  NULL
}
class Entry#209 (4) {
  public $id =>
  NULL
  public $content =>
  string(0) ""
  public $date =>
  string(0) ""
  public $userId =>
  NULL
}

Time: 0 seconds, Memory: 2.75Mb

There was 1 failure:

1) EntryHelperTest::testAddEntry
Expectation failed for method name is equal to <string:insert> when invoked 1 time(s).
Parameter 0 for invocation EntriesDAO::insert(Entry Object (...)) does not match expected value.
Failed asserting that two objects are equal.
class条目#212(4){
公共$id=>
无效的
公共$content=>
字符串(0)”
公共$date=>
字符串(0)”
公共$userId=>
无效的
}
班级报名#209(4){
公共$id=>
无效的
公共$content=>
字符串(0)”
公共$date=>
字符串(0)”
公共$userId=>
无效的
}
时间:0秒,内存:2.75Mb
有1次失败:
1) EntryHelperTest::testAddEntry
调用1次时,方法名称等于的预期失败。
调用EntriesDAO::insert(条目对象(…))的参数0与预期值不匹配。
断言两个对象相等失败。

可能是PHPUnit用来检查对象是否相等。如手册所述

…当使用标识运算符(===)时,对象变量是相同的,当且仅当它们引用同一类的同一实例时


由于您正在addEntry()方法中创建一个新的Entry实例,比较将失败。

可能是PHPUnit用于检查对象是否相等。如手册所述

…当使用标识运算符(===)时,对象变量是相同的,当且仅当它们引用同一类的同一实例时


由于您正在addEntry()方法中创建一个新的Entry实例,比较将失败。

根本原因。我正在将返回值赋给对象。 在我测试的功能中

$actual->newId = $iDao->insert($actual); 
这一定是在修改比较值。 我把作业分到了

$newId = $iDao->insert($actual);
*注意,在调用mock之后修改$actual仍然会中断测试。所以这是行不通的

$actual->id = $newId;

根本原因。我正在将返回的值分配给对象。 在我测试的功能中

$actual->newId = $iDao->insert($actual); 
这一定是在修改比较值。 我把作业分到了

$newId = $iDao->insert($actual);
*注意,在调用mock之后修改$actual仍然会中断测试。所以这是行不通的

$actual->id = $newId;

我想这可能也是问题所在,但后来我能够为另一种方法编写一个测试。。“更新”成功了。我找到了差异和根本原因。我正在将返回值赋给对象$实际->新ID=$iDao->插入($actual);这一定是修改了比较值。我想这可能也是问题所在,但后来我能够为另一种方法编写测试。。“更新”成功了。我找到了差异和根本原因。我正在将返回值赋给对象$实际->新ID=$iDao->插入($actual);这一定是在修改比较值。