1

私はTDDを使用しています。システムで生の SQL クエリを使用する必要があります。TDD は、ビジネス ロジックのみをテストする必要があることを示唆しています (データベース、メール送信、またはファイル システムのすべてのテストは統合テストです)。そのため、モックしたい別のクラスに SQL コードを配置します。コードは次のとおりです。

// Creating shipping method data provider mock
$shippingMethodDataProviderMock = $this->getMockBuilder('\ordersmanager\Model\Order\ShippingMethod\ShippingMethodDataProvider')->disableOriginalConstructor()->getMock();

// Getting shipping method instance
$emsShippingMethod = ShippingMethodFactory::getShippingMethod('ems', $shippingMethodDataProviderMock);

ShippingMethodProviderしかし、インスタンスをShippingMethodFactoryクライアント コードに渡したくありません。

集約の代わりにコンポジションを使用できます。aShippingMethodProviderで aを作成し、それをコンストラクターShippingMethodFactoryに渡します。ShippingMethodしかし、その場合ShippingMethodProvider、クライアント コードから分離されているため、モックできません。

ShippingMethodFactory単体テストされないラッパーを作成できますが、次のような快適な API を作成します。

$emsShippingMethod = ShippingMethodFactory::getShippingMethod('ems');

しかし、このラッパーはテストされません。

これをテストして優れた API を作成するためのより良い方法は何ですか?

4

0 に答える 0