Mockery1.0 オリジナルのコンストラクターを呼び出さない

オリジナルのコンストラクターを呼び出さない

生成パーシャルテストダブルを生成するとき、Mockeryは指定されたメソッドのみをモックします。つまり、モックしているクラスのオリジナルなコンストラクターが呼び出されることを意味しています。

あるケースではこの振る舞いを望まないでしょう。コンストラクターは他のメソッドや関連しているオブジェクトを呼び出すかもしれませんし、それによりテスト実行時のアプリケーション環境では望まない副作用を起こしてしまう可能性があります。

これが起きた場合、オリジナルのコンストラクターが呼び出されないように、ランタイムパーシャルテストダブルを使用する必要があります。

class MyClass
{
    public function __construct()
    {
        echo "Original constructor called." . PHP_EOL;
        // 他の副作用が起きる可能性がある…
    }
}

// これにより、"Original constructor called."が出力される
$mock = \Mockery::mock('MyClass[foo]');

よりよりアプローチは、ランタイムパーシャルダブルを使用します。

class MyClass
{
    public function __construct()
    {
        echo "Original constructor called." . PHP_EOL;
        // 他の副作用が起きる可能性がある…
    }
}

// これなら、何も出力されない
$mock = \Mockery::mock('MyClass')->makePartial();
$mock->shouldReceive('foo');

生成パーシャルテストダブルの使用を推奨していないのは、これが理由の一つです。可能であれば、常にランタイムパーシャルを使用してください。

パーシャルテストダブルについては、詳細ページをご覧ください。

Note: 生成パーシャルテストダブルが役立つのは、互換性です。とても古いバージョンのMockeryを使用する場合、生成パーシャルではコンストラクターを呼び出さない振る舞いをしていました。Mockeryをより新しいバージョンへアップグレードしている場合は、生成パーシャルの代わりに、ランタイムパーシャルをテストで使用するように変更する必要があるでしょう。

この変更は、2013年の初頭に導入されました。それより前のMockeryを使用しているのでしたら、この問題は起きません。

ドキュメント章別ページ

概論

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

バージョン

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる