1

「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.
4

2 に答える 2

1

おそらく、PHPUnit は同一性演算子 (===)を使用して、オブジェクトが等しいかどうかをチェックしています。説明書に書いてある通り

...恒等演算子 (===) を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合にのみ同一です。

メソッド addEntry() で Entry の新しいインスタンスを作成しているため、比較は失敗します。

于 2013-04-07T15:21:36.777 に答える
0

根本原因。戻り値をオブジェクトに割り当てていました。私がテストしていた機能では、

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

そして、これは比較された値を変更していたに違いありません。への割り当てを分離して修正しました

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

*注: モックの呼び出し後に $actual を変更すると、テストが中断されます。したがって、これは機能しません。

$actual->id = $newId;
于 2013-04-07T15:30:14.033 に答える