2016-06-24 3 views
0

私は、ドメインオブジェクトのロックを解除するために、新しいエンドポイントを記述しようと思って、何かのように:私はTDDを適用したよう- DBの通信に必要な(TDD)

../domainObject/{id}/unlock 

、私が始めていますまずAPIテストを作成します。テストが失敗すると、私は統合テストとユニットテストの作成を開始し、実際のコードを実装します。

APIテストでは、テストフィクスチャセットアップ用のロックされたドメインデータが作成され、作成されるアンロックエンドポイントをテストする必要があります。ただし、ドメインオブジェクトをシステムにロックするためのエンドポイントはありません。 (私たちのQuartzジョブはデータをロックします)つまり、データベースを直接使用してデータを作成する必要があります。

APIテストでは、データベースの直接的な使用はベストプラクティスではありません。テストデータが必要な場合は、APIも呼び出す必要があります。例えば

../domainObject/{id}/lock 

この場合、このシナリオは例外ですか?それとも、他の練習がありますか?

ありがとうございました。

+1

私は、セットアップが特に困難である/費用がかかる場合は、テストデータに頼るか、バックドアを通して挿入することをお勧めします。つまり、実際の挿入/作成のシナリオをテストしているとき(他のシナリオの場合)です。あなたのケースでは、クォーツ(ジョブ)機能を制御/ラップする方法がない場合は、OKかもしれません。 –

+0

はい、バックドアを使用することは許容できます、ありがとうございます。しかし、私はそれをカバーすることができる受け入れテスト(セレン)があるので、私はこの機能のためのAPIテストを作成しませんでした。 – skynyrd

答えて

0

ここでは良いことも悪いこともありません。データベースを含めたシステムのテストの終わりから終わりまでにどのくらいの価値があるかについてです。

テストを高速化するためにインメモリデータベースを使用するか、開発環境に本格的なパーマネントテストDBを設定する必要があるため、DB部分のテストにはもう少しインフラストラクチャが必要です。後者を実行するときは、必然的に遅くなるため、通常のテストスイートよりも頻繁に実行されないエンドツーエンドのテスト用に別個のテストスイートを用意することをお勧めします。 このシナリオでは、既存のテストデータが常にDBに存在し、ロックされたオブジェクトがその中の1つになることがあります。

このすべてについて気にしない場合は、データストアの抽象化(リポジトリ、DAOなど)をスタブして、ロックされたロック済みオブジェクトを返すことができます。

関連する問題