コンストラクターの引数によって応答が異なるクラスがある場合、そのクラスの仕様をどのように記述しますか?
class Route
{
function __construct($url, array $methods = array())
{
// stores methods and url in private member variables
// creates a regex to match $url against incoming request URLs
}
public function isMatch($url)
{
// checks if the incoming request url matches against this url
}
}
使用例:
$a = new Route('/users/:id');
$a->isMatch('/users/1') // returns true;
$b = new Route('/users');
$b->isMatch('/users') // returns true
phpspec の let 関数を使用して、このクラスの仕様を設定すると、次のようになります。
class Route extends ObjectBehaviour
{
function let()
{
$this->beConstructedWith('/users/:id')
}
}
私の仕様では、このクラスの動作がいずれかのケースで機能するかどうかのみを確認できます。
これをテストできるようにセッターメソッドを追加することを検討しましたが、テストのためにカプセル化を破っているようです。
私はこれに触れるものを見つけるのに苦労しているので、おそらくこれは悪いコード臭の状況であると考え始めています.