【问题标题】:phpunit: Comparing object param of with() for Mock objectphpunit:比较 with() 的对象参数与​​ Mock 对象
【发布时间】:2013-03-29 09:33:12
【问题描述】:

我正在尝试将作为“with”参数的对象与我的模拟对象进行比较。 当我比较预期和实际的var_dump 时,它们看起来相当。 我的预感是我在 ->with 参数中做错了什么。 提前致谢

我的测试代码

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.

【问题讨论】:

    标签: object mocking phpunit


    【解决方案1】:

    可能,PHPUnit 正在使用the identity operator (===) 来检查对象是否相等。正如手册中所说的

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

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

    【讨论】:

    • 我在想这也可能是问题所在,但后来我能够为不同的方法编写测试......“更新”有效。我找到了差异和根本原因。我正在将返回的值分配给对象。 $actual->newId = $iDao->insert($actual);这一定是在修改比较值。
    【解决方案2】:

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

    $actual->newId = $iDao->insert($actual); 
    

    这一定是在修改比较值。 我通过将分配分开来修复它

    $newId = $iDao->insert($actual);
    

    *注意,在调用 mock 之后修改 $actual 仍然会中断测试。所以这行不通。

    $actual->id = $newId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多