PHPUnitで標準出力を取得する

リクエストに対するレスポンスを返す際に、echoでXML文字列を返すというAPIがあり、
Unitテストを作る際に戻り値が取得できず、少々はまったのでメモ。
知っていればどうってことない話ではあります。
ob_start、ob_get_clean関数を用いることで実現しました。

        // リクエスト用のヘッダーを生成
        $this->configRequest(['headers' => ['Content-Type' => 'application/x-www-form-urlencoded']]);
        // 標準出力を読み取り開始
        ob_start();
        // リクエスト xmlはパラメータ
        $this->post('/your-api/path', ['xml' => $request]);
        // 標準出力受取
        $actual = ob_get_clean();
        // XMLオブジェクト化
        $actual = simpleXML_load_string(stripslashes($actual));

        // HTTPレスポンス確認(CakePHPのIntegrationTestCaseを使用)
        $this->assertResponseOk();

        // XML文字列を標準出力
        echo (string)$actual->asXml();

        // ルートノードの名称確認
        $this->assertTrue($actual->xpath("/ROOTNODE") != false);

マニュアル

https://www.php.net/manual/ja/function.ob-start.php

https://www.php.net/manual/ja/function.ob-get-clean.php