2009-03-24 11 views
1

私はサービスクライアントによって渡されたタスクを構築するサービスクラスの開発中にTDD(私はnewbeeです)に従おうとしています。構築されたオブジェクトは、他のシステムに渡されます。つまり、このサービスはタスクを受け取りますが、結果として何も返しません。つまり、構築されたタスクを他のサービスに渡します。 私はそれを宣言することができないので、どのようにしてテストを書くことができますか? 私はサービス内の相互作用を追跡するためにモックを使用することを考えていますが、私はサービスの内部実装と結びついているので、モックを使用することを少し恐れています。TDDとサービス(何が何かを返しますが何も返しません)

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

+0

- どのようなプログラミング言語(あなたと一緒に仕事をしていますか? –

答えて

2

外部のコンポーネントで内部的に使用されているインターフェイスを実際に嘲笑しようとしているので、これには問題はありません。これは本当に模倣が意図されており、あなたのユースケースの完璧なマッチのように聞こえます。

TDDを実行するときには、これらの外部サービスのモックを作成するだけでよいので、良い練習とみなされるそれらの迅速なターンアラウンドサイクルを得ることもできます。これらのモックは簡単に別の失敗したテストを書くことができます。

1

あなたはカップルのクラスでそれを分割することを検討することができます。 1つは実行されるタスクのリストを作成する責任があり、もう1つはそれが渡されるタスクのリストを実行する責任があります。この方法で、タスクのリストを作成するコードを直接テストできます。

私は外部システムが関わっているときにTDDプロセスをどのように表示するかについて、別のquestionに投稿したサンプルを追加したいと言っています。

あなたには、いくつかの特定のロジックは、電子メールを送信ログ ファイルの情報を、 データベース上のデータを保存し、(ない すべて一度に私が知っているWebサービスを呼び出す かどうかを確認する必要があるとしましょうそれぞれのテストを追加するのは です)。 の各テストでは、外部システム を実際にテストしたいと思っています。 がテストするのは、ロジックが を呼び出す場合です。その場合は、 が必要です。だから 電子メールが のユーザーを作成するときに送信されることを確認するテストを書くとき、 のロジックは、それが の依存関係を呼び出すかどうかをテストします。 電子メールを送信するコードを実装するために実際に を持たずに、これらのテストと に関連するロジックを書くことができます。 ...を送信したことを知るために外部システム にアクセスする必要があります。これは手近な タスクに焦点を当て、デカップルシステム を手助けするのに役立ちます。 これらのシステムに送信されているものをテストすることも簡単になります。

0

わからない、それはこのようなものかもしれない何を擬似コードでそう使用している言語:あなたはこのことについていくつかの詳細を与えた場合、それが役に立つかもしれません

when_service_is_passed_tasks 
    before_each_test 
    mockClients = CreateMocks of 3 TaskClients 
    tasks = GetThreeTasks() 
    myService = new TaskRouter(mockClients) 

    sends_all_to_the_appropriate_clients 
    tasks = GetThreeTasks() 
    myService.RouteTaks(tasks) 
    Assert mockClients[0].AcceptTask(tasks[0]) was called 
    Assert mockClients[1].AcceptTask(tasks[1]) was called 
    Assert mockClients[2].AcceptTask(tasks[2]) was called 

    if_one_routing_fails_all_fail 
    tasks = GetTasksWhereOneIsFailing() 
    myService.RouteTaks(tasks) 
    Assert mockClients[0].AcceptTask(*) was not called 
    Assert mockClients[1].AcceptTask(*) was not called 
    Assert mockClients[2].AcceptTask(*) was not called 
関連する問題