2016年1月4日月曜日

xUnit Test Patterns [Chapter12 - Organizing Our Tests]

対象のプロダクトコードに対して、Unit Testが可能な最小単位を「Method」とする。
各「Method」をテストするための「Test method」を複数用意してゆく事になる。
この「Test method」をテストケースと呼ぶ事にする。

これらの「Test method」は当然何らかのクラスに属する事になる。
このクラスを「Testcase Class」と呼ぶ事にする。
各テストケースの入れ物である「Testcase Class」をどういった単位で設けるべきか?

●Testcase Class per Class ・・・ テスト対象のクラスに対して「Testcase Class」を設ける。
  • プロダクトコードとテストコードの紐づけが一目瞭然。
  • Test methodの増加に伴い、テスト用のクラスが肥大化する。
  • 各Test methodが必要とするFixture(Fixture setup)が共通とは限らない。

●Testcase Class per Feature ・・・ 同一のFeatreに属するテストケースをグルーピングする。
  • 対象のFeatureに関連する全Testcaseを確認したいといった場合に一目瞭然。
  • 各Test methodが必要とするFixture(Fixture setup)が共通とは限らない。

●Testcase Class per Fixture ・・・ 同一のFixtureに属するテストケースをグルーピング。
  • Fixture(Fixture setup)が共通。
  • 対象のFeatureに対するTestcaseが複数のテスト用のクラスへ分散してしまう

パターンの使い分け。

「Unit tests for stateful objects and each method needs to be tested in each state of object」
⇒「Testcase Class per Fixture」を選択する方が良い。

「Customer tests against a Service facade」
「Prebuilt Fixture、つまりFixture setupが各Testcaseごとに必要とならない場合」
⇒「Testcase Class per Feature」を選択する方が良い。


[私的には]
C0,C1といったカバレッジ網羅を目的とするテストについては「Testcase Class per Class」とし、
Fixture setupが異なるものについては随時Testcase Classを分割してゆく。

上記とは別に、Feature drivenで作成するTestCaseについては「Testcase Class per Feature」とし、
Fixture setupが異なるものについては随時Testcase Classを分割してゆく。

という管理が良さそう。

0 件のコメント:

コメントを投稿