ユニットテストのクラスを設定するためのオプションを検討しています。この特定のクラスは、通常の状況下では常に同じ石鹸クライアント設定を使用する必要があります。私はクラスのユーザーが石鹸クライアントを使用するときに設定することに関心を持つ必要がないように感じる。または、それはまったく石鹸を使用していることに注意してください。ユニットテストのためのオプションの依存性注入
唯一の例外はユニットテストです。私はSoap_Clientをモックできるようにする必要があります。私はコンストラクタでsoapクライアントを作成し、オプションでsetSoapClient()で設定できる次のアプローチを考え出しました。
class WebServiceLayer
{
const WSDL_URL = 'https://www.example.com/?WSDL';
private $soapClient;
public function __construct()
{
$this->soapClient = new Soap_Client(self::WSDL_URL);
}
public function setSoapClient(Soap_Client $soapClient)
{
$this->soapClient = $soapClient;
}
public function fetchSomeResponse()
{
$soapClient = $this->soapClient;
return $soapClient->someRequest();
}
}
これは有効な方法ですか?私が見ている唯一の問題は、 "私が聞いた"コンストラクタ内のクライアントをインスタンス化することは避けるべきことです。
私は他のクラスの前にこのジレンマに遭遇しました。だから、これに関して人々の意見を得るのは本当にいいことです。
クライアントが遅延ロードではなくコンストラクタで作成されるように、この例を変更しました。 – AaronSzy