8

このコードでタイプヒントを満たすモックを作成しようとしています(Mockery):

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper');

またはこれ(PHPUnit):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper');

しかし、返されるモックはMockery\Mock Objectorと呼ばれMock_iFileSystemWrapper_a5f91049ます。どちらのフレームワークでもまったく必要なもののインスタンスではない場合、これをどのようにタイプチェックすればよいでしょうか?

モック フレームワークが実際のクラスをロードしようとしているのはなぜですか? 実際のクラスが必要な場合は、実際のクラスを含めます。

この問題は、テストを書いているときに何度も私の作業を遅らせてきました。私は型ヒントをウィンドウの外に放り出し、代わりにクラス名をチェックするか、モックを使用するのが面倒なので、単純に本番オブジェクトを使用しようとしています。

4

2 に答える 2

4

私は自分の既存のテストを試したところ、インターフェイスの名前空間名を存在するものから存在しないものに変更することで、あなたが説明したものとまったく同じになりました(phpunitを使用)。私のモックオブジェクトのクラス名はMock_ViewInterface_c755461eです。正しいインターフェイス名に戻すと、正常に機能します。

したがって、私は次のいずれかを言います:

  1. 存在しないインターフェース名を使用しようとしています(タイプミスや名前空間コンポーネントの欠落など)。
  2. ユニットテストブートストラップで自動ロードが正しく設定されていないなど、何らかの理由でライブラリコードがロードされていません。
于 2013-02-03T08:28:21.193 に答える
-2

基本クラスをチェックするには、特別な関数を使用する必要があります。このようなもの:

$mock = $this->getMock('MyClass');
$this->assertInstanceOf('MyClass', $mock);
于 2013-02-02T22:24:48.837 に答える