2011-09-09 10 views
2

私はC#でNUnitとSeleniumを使って一連の自動テストを書いています。テストクラス - いつリファクタリングするのですか?

編集:ウェブサイト全体をテストして、ウェブサイトを使用する3種類のメンバーの3つのクラスを作成します。これらのクラスには、これらのメンバーがさまざまなアクションを実行するためにセレンを使用するメソッドが含まれています。次に、これらのクラスが作成され、メソッドが適切な入力を持つテストクラスによって呼び出されます。

私の質問は:

私のテストクラスはどのくらいの大きさになりますか? (何千ものテスト?)

私の機能クラスをリファクタリングするのはいつですか? (25または50の方法、1000行のコードなど)

私はテストデザインについてすべて読むことを試みてきました。いいリソースがあれば、私はリンクを感謝します。

+0

テスト中のクラスが数千行のコードを持つGodクラス/ Superクラスではない場合、私はあなたがそのクラスに対してこのような大きなテストを設定した理由を想像できませんが、 ?おそらくあなたはテストの下でクラスをリファクタリングする必要がありますので、テストクラスも簡素化されます。 – sll

+0

私は単体テストを実行するのではなくウェブサイト全体をテストすることを明確にするために編集しました。 – FooBar

+0

これは問題ではありません。テストを書くときには、定期的な開発ガイドラインと原則に従うべきです。そのような大きなクラスを作成しないでください。責任と懸念の分離が必要です。 – sll

答えて

6

テストクラスがどのくらい大きくなるのですか? (何千ものテスト?)

はいそうです。テストは長期的に維持する必要があり、巨大なテストクラスは理解し維持することが難しい。

私の機能クラスをリファクタリングするのはいつですか? (25または50のメソッド、1000行のコードなど)

特定のテストケースを見つけることや、特定のシナリオに関連するテストをブラウズするのが難しいと感じ始めたとき。私はここでは厳しい制限はないと思っています。生産クラスのサイズやメソッドの数に厳しい制限がないのと同じです。私はテストコードがより単純になる傾向があり、理解しにくくなるようになるためのしきい値が高くなるため、私は個人的にテストコードの制限をプロダクションコードよりも高くしています。しかし、一般的に、50行のテストメソッドを持つ1000行のテストクラスは、私にとって大きすぎると感じ始めます。

私はちょうどこのようなテストクラスで作業しなければならなかったので、分割してしまったので、今では特定のクラス*の特定のメソッド/ユースケースをテストするテストクラスがいくつかあります。私がパラメータ化されたテストに変換することができた古いテストのいくつかと、すべての新しいテストはparamterizedテストとして書かれています。私は、パラメータ化されたテストによって大きな画像を見やすくなり、すべてのテストケースを一気に念頭に置いていることがわかりました。私はJavaプロジェクトでJUnitを使ってこれを行いましたが、NUnit 2.5ではパラメータ化されたテストも提供されています。

*私たちがそれをカバーするために非常に多くのテストケースを必要とするなら、テスト対象のクラスがリファクタリングされるべきではないかと正しく尋ねるかもしれません。それは私たちのレガシーアプリケーションでは、その中にあまりにも多くのものを持つ最大のクラスです。しかし、まずテストケースを用意する必要があります:-)これはあなたのクラスにも当てはまります - それをカバーするために非常に多くのテストケースが必要な場合は、テスト対象のクラスがあまりにも多くのことをやろうとしているだけかもしれませんが、その機能のいくつかを独自の単体テストで別のクラスに抽出する方がよいでしょう。

+0

私は実際にパラメータ化されたテストが何であるか分かりませんでした。定義を読んだとき、テストクラスで既にこれを行っていたことが分かりました。 – FooBar

+0

テストクラスはウェブサイトの機能性をテストしています。ウェブサイトの機能性が向上しているため、あなたのアドバイスを受け取り、リファクタリングします。 – FooBar

関連する問題