Home | Symfony2Doc »クックブック »テスト »複数のクライアントのインタラクションをテストする方法

コンテンツ上部に更新日の記載のないページは、翻訳の内容が2.0相当のものになっております。最新の内容は原文のページをご確認ください。

複数のクライアントのインタラクションをテストする方法

チャットシステムのように異なるクライアント間のインタラクションをシミュレートする必要がある際には、次のようにクライアントを複数作成します。

$harry = static::createClient();
$sally = static::createClient();

$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');

$this->assertEquals(201, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

コードがグローバルステートを維持するとき以外、もしくは、サードパーティのライブラリがグローバルステートのようなものを持っているとき以外は、動作します。このようなケースでは、クライアントを分離することができます。

$harry = static::createClient();
$sally = static::createClient();

$harry->insulate();
$sally->insulate();

$harry->request('POST', '/say/sally/Hello');
$sally->request('GET', '/messages');

$this->assertEquals(201, $harry->getResponse()->getStatusCode());
$this->assertRegExp('/Hello/', $sally->getResponse()->getContent());

透過的に分離されたクライアントは専用のクリーンな PHP のプロセスで実行されますので、副作用を避けることができます。

Tip

クライアントの分離は遅いので、クライアントを1つメインプロセスに保持しておき、他のクライアントを分離しましょう。

blog comments powered by Disqus