2012-01-17 5 views
0

私はこの状況で見つけました:私は3つの異なるタスクを行う3つのスレッドを実行するレガシーサービス(C#で書かれています)を持っています。この段階では、生産段階でバグや処理されない例外などが多く発生し、開発者の生活が非常に困難になるため、この作業は単体テストで行う必要があります。1つのパブリックメソッドだけを使ってタスクをユニットテストする

私の意見では、これらのタスクは明らかに1つのパブリックメソッド(Runと仮定します)を公開していますが、これが正しいとすれば、これを単体テストするべきだと思います。私は正しいですか?このような仕事にどのようにアプローチしますか?どのようなリファクタリングを実行しますか?

+2

この質問は非常に曖昧で、どの言語*も指定していません。サンプルクラスを提供できますか?また、レガシーコードベースに単体テストを追加する方法についてのヒントを得るために、[従来のコードで作業する](http://tinyurl.com/WELCBook)を読むことをお勧めします。 – Johnsyweb

+0

Johnsywebこんにちは、これは非常に曖昧な質問ですが、私はそれをより明確にする方法はわかりません。言語を追加して編集しました(C#)。私はクラスを提供することはできません(非常に大きな)が、それは公式メソッドからチェーンで呼び出されたばかりのプライベートメソッド(void戻り値)の多くによって形成されます。ありがとう – Marconline

+0

すべての*それらのパブリックメソッドをテストできませんか? –

答えて

1

多くのコードを内部的に実行する1つのパブリックメソッドでレガシークラスをテストする際の問題は、単体テストのレベルまで決して下がらないということです。

最高のソリューションは、すべての依存関係を注入できるように、コードをそのようなレベルにリファクタリングすることです。すべてのコードパスをテストできます。

テストを実行する環境を制御できない場合は、3つのタスクのそれぞれが別々に実行されるようにテストの設定を異ならせることで、それぞれの結果を個別にチェックして、 。

+0

こんにちはWouterデコート!これは私がやろうとしていることです:リファクタリングと依存関係とテストパスを注入します。それが最善の解決策だと思いますか? – Marconline

+0

@Marconline確かに行く方法です。クラスに依存するロジックではなく、現在のクラスのロジックをユニットテストする必要があります(別々のユニットテストが必要です)。依存性注入はこれを助けます。テスト可能なコードの詳細を確認してください:http://misko.hevery.com/code-reviewers-guide/ –

+0

私は主にインターフェイスで置き換えられたコードから具体的なクラスを削除しました。私はクラスから継承した派生クラスをテストします。このクラスはいくつかのメソッドをオーバーライドし、メインクラスにスタブとモックを挿入します。これが正しい振る舞いであると私に言えば、私はこの道を通るだろう。ありがとう、マルコ – Marconline

0

OK。まず、テストしたいタスクが何をしているのかを明確に把握します。次に、心配の分離について考えてみましょう:コードを分けてクラスを分けて抽出し、インターフェースの依存関係注入を注入できるコードの部分はありますか?たとえば、アダプターやリスナーのパターンを使用することも、メイン・クラスに注入された単純な外部コラボレーターを使用することもできます。そうなら、それを行う。次に、それぞれを個別にテストします。

+0

こんにちはギョーム、はい。私はこれをやろうとしている。懸念事項を洗い出し、各クラスを無作為にテストします。それはあなたの意見で正しい方法ですか? – Marconline

関連する問題