エンティティマネージャとリクエストを使って、いくつかの正規バリデータとカスタムバリデータの両方を持つモデルのテストを書こうとしています。私はこの問題が何らかの理由で問題になったら、私のテストにphpunitを使っています。symfony2ユニットバリデーションバリデーションカスタムバリデーター
私は、エンティティマネージャと要求の両方をスタブし、次にいくつかのオブジェクトを検証することによって、カスタムバリデータをテストします。これによりカスタム検証が動作することが証明されたので、通常の検証をテストするだけで済みます。可能であれば、カスタム検証ツールをそのまま残しておいてください。私のテストで
/**
* @MyAssert\Client()
*/
abstract class BaseRequestModel {
/**
* @Assert\NotBlank(message="2101")
*/
protected $clientId;
/**
* @Assert\NotBlank(message="2101")
*/
protected $apiKey;
// ...
}
が、私は、オブジェクトを作成し、それを検証し、バリデータを取得しています:
は、ここに私のモデルです。もちろん
$validator = ValidatorFactory::buildDefault()->getValidator();
$requestModel = new RequestModel();
$errors = $validator->validate($requestModel);
それはサービスであり、いくつかの依存性注入コンテナによって解決される必要がMyAssert \クライアント用に定義されたバリデータを、見つけることができないので、これは失敗します。
誰でもカスタムバリデータをスタブする方法、またはのバリデーションから除外する方法はありますか?
なぜ機能テストでテストしないのですか?カスタムバリデータクラスを既にユニットテストしているので、テストする必要があるのは実際の環境です。 'Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase'で作成されたもののように、実際のコンテナからバリデータを取得してみませんか? – Florian
まず、機能テストは遅いです。私は、テストデータベースをセットアップし、フィクスチャーをそれに取り込み、テストを実行する必要があります。これは、ウェブページの使用のように、すべての場所でテストされるだけのものには魅力的です。モデルのバリデーションをテストするために、私はデータベースなどすべてを必要としないので、単体でテストしたいと思います。 – Sgoettschkes
私はそれが遅いことに同意しますが、DIC遅延読み込みでは、 'validator'サービスとその直接の依存関係(注釈リーダーのような)だけがインスタンス化されます。 '$ container-> get( 'validator') - > validate($ object);' – Florian