2009-06-02 17 views
5

次の方法をテストするにはどうすればよいですか?新しいプロセスを作成するユニットテストコードはどのようにして作成しますか?

これは、インターフェイスの具体的なクラス実装のメソッドです。

Processクラスは、必要なメソッドとプロパティのみを公開するインターフェイスでラップしています。 ProcessWrapperクラスは、このインタフェースの具体的な実装です。

public void Initiate(IEnumerable<Cow> cows) 
    { 
     foreach (Cow c in cows) 
     { 
      c.Process = new ProcessWrapper(c); 
      c.Process.Start(); 
      count++; 
     } 
    } 

答えて

3

これを回避する方法は2つあります。最初は依存性注入を使用することです。ファクトリをインジェクトし、Initiateメソッドを呼び出してcreateメソッドを呼び出すことで、テストに必要なProcessWrapperを取得できます。

他の解決方法は、TypeMockなどの模擬フレームワークを使用して、これを回避できるようにすることです。 TypeMockは基本的に何かをモックすることができるので、実際のP​​rocessWrapperインスタンスの代わりにモックオブジェクトを提供するために使用することができます。

+0

私はMoqを使用していますが、どうやって偽装するかはわかりません。あなたはどのようにTypeMockでそれをやりますか? – Schotime

+0

TypeMockは、ILを変更するという点で独特です。そうしないとモックできないエンティティをモックすることができます。私はまだ注射方法をお勧めしますが、それがどうにかできない場合は、TypeMockを見ることができます。 –

0

あなたのプロセスは何をしますか?それが何をするべきかを確認する方法はありますか?たとえば、ファイルまたはデータベーステーブルに書き込むことができます。または、テストデータを呼び出すことができるAPI(IPC、Webサービスなど)が公開されている可能性があります。

TDDの観点からは、簡単に確認できるアクションを実行する「モック/テストプロセス」をプラグインすると意味があります。 (これにより、テストコードが何かを注入できるようにコードを変更する必要があるかもしれません)。この方法では、呼び出しコードをテストしているだけで、実際のビジネスプロセスをテストする必要はありません。その後、ビジネスプロセスをテストするために異なる単体テストを使用することができます。

+0

新しい「プロセス」を開始します。 – Schotime

+0

あなたのサブプロセスは何をしていますか?あなたのサブプロセスが想定していることをしていることを確認する方法はありますか? –

+0

サブプロセスは新しいプロセスを実行します。すべての作業を行う引数を持つ別のプログラムを実行します。後で私はそれが終わったかどうかだけチェックします。 – Schotime

0

私はC#に精通していません(私はハッシュなしで私のほうが好きですが)プロセスへのインターフェースを必要とします(IPCなどが最も便利です)ので、テストリクエストを送信して結果を得ることができますバック。最も簡単なレベルでは、プロセスにメッセージを送信して結果を受け取るだけです。または、より細分化して、テストハーネスからより具体的なコマンドを送信することもできます。これは、ユニットテスト環境の設定方法、より正確にはテストコマンドの送信方法、受信方法、結果の報告方法によって異なります。

私は個人的には単に受け取るプロセスの内部にテストオブジェクトを持ち、&は単体テスト結果を報告し、そのオブジェクトの内部にテストコードを持っています。

関連する問題