web-dev-qa-db-ja.com

別のクラスから静的メソッドを呼び出すメソッドの単体テストを作成する

私のモジュールで定義されたカスタムサービスがあり、そのメソッドの1つで、依存するモジュールによって定義されたクラスから静的メソッドを呼び出します。このメソッドは静的なので、オブジェクトをインスタンス化する必要はありませんが、これは依存関係を注入できないことも意味します。 Soooo ...静的呼び出しをモックするにはどうすればよいですか?

以下に、いくつかの擬似コードを示します。

use some/other/class/called/FOO

...

function myMethod() {
  // Do some things...
  $some_var = FOO::staticMethodToGetValue();
  // Do more things...
  return "something";    
}
5
bleen

静的呼び出しを直接モックすることはできません。

これを修正する比較的簡単な方法は、コアがかなりの場所で、オブジェクト/サービスにまだ変換されていない関数をモックするために使用する方法です。静的メソッドを呼び出す以外に何もしない独自のクラスでメソッドを作成します。

次に、テストのために、独自のオブジェクトをモックしてそのメソッドのみをモックするか、そのメソッドをオーバーライドして別の何かを返すテストサブクラスを作成できます。

6
Berdir