ホームページ >バックエンド開発 >PHPチュートリアル >phpunit_PHP チュートリアルでシングルトン クラスをモック (モック) する方法

phpunit_PHP チュートリアルでシングルトン クラスをモック (モック) する方法

WBOY
WBOYオリジナル
2016-07-13 17:53:31866ブラウズ

モックの紹介
クラス A を単体テストする場合、クラス A はクラス B に依存する可能性があります。依存関係を減らし、クラス A メソッドのテストを容易にするために、クラス B をシミュレートし、(実際に実装する代わりに) 各メソッドの戻り値を単純に指定できます。特定のロジック)。
Phpunit は一連のシミュレーション API を提供しており、これらは次のように簡単に使用できます:

クラス StubTest は PHPUnit_Framework_TestCase を拡張します
{
パブリック関数 testStub()
{
// SomeClass クラスのスタブを作成します。
$stub = $this->getMock(‘SomeClass’);
// スタブを設定します。
$stub->expects($this->any())
->メソッド('doSomething')
->will($this->returnValue(‘foo’));
// $stub->doSomething() を呼び出すと、「foo」が返されるようになります。
$this->assertEquals('foo', $stub->doSomething());
}
}

この例では、「SomeClass」のモックを取得します。これは何度でも呼び出すことができ、doSomething メソッドが呼び出されると、値 foo が取得されます。


2番目の質問
シングルトン クラスの場合、そのコンストラクター メソッドはプライベートであり、getMock の実装はデフォルトで元のクラスのコンストラクター メソッドを呼び出すことがわかっています。
SomeClass がシングルトンの場合、phpunit はプロンプトを表示します
コンテキスト「PHPUnit_Framework_TestCase」からプライベート SomeClass::__construct() を呼び出す

現時点では、テストはどのように実施されるべきですか?


3つの解決策
モックには引き続き getMock を使用します。
5 番目のパラメータを false に設定するだけです。その意味は、元のオブジェクトのコンストラクターを呼び出さないことです。
$stub = $this->getMock(‘SomeClass’, array(), array(), ”, false);

これは使い方が少し複雑だと言わざるを得ません。

phpunit3.5以降を使用している場合は、より使いやすいAPIがあります。次のように、元のコンストラクター メソッドへの呼び出しを無効にすることができます:

$stub=$this->getMockBuilder('SomeClass')->disableOriginalConstructor()->getMock();

添付ファイル:
getMock の 6 つのオプションのパラメーターの詳細については、http://www.phpunit.de/manual/3.6/en/test-doubles.html

を参照してください。

マニュアルにはデフォルト値については記載されていません。テスト後の結果は次のとおりです。皆様の便宜のためにここに掲載します。
array()、array()、”、false、false、false
それは
$stub=$this->getMockBuilder(‘SomeClass’)
同等:
$stub=$this->getMockBuilder('SomeClass', array(), array(), ”, true, false, false)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478025.html技術記事モックの概要 クラス A を単体テストする場合、クラス A はクラス B に依存している可能性があります。依存関係を減らし、クラス A のメソッドのテストを容易にするために、クラス B をシミュレートし、その関係者を単純に指定することができます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。