BT

より良いユニットテストためのガイドライン

| 作者: Mark Levison フォローする 0 人のフォロワー , 翻訳者 和智 右桂 フォローする 0 人のフォロワー 投稿日 2009年8月2日. 推定読書時間: 3 分 |

原文(投稿日:20099/7/24)へのリンク

Jimmy Bogard氏は「価値あるユニットテストのために」という記事を書いており、そこで3つのルールを提示している。

  1. テストの名前はユーザの視点から見たwhatとwhyを記述しなければならない」 – この考え方は、開発者がテストの名前を読んで、意図されたふるまいがどのようなものであるかを理解できなければならないということだ。
  2. テストもコードであることには変わりないのだから、多少は愛情を注げ」 – プロダクションコードに対してしかリファクタリングを行ってはいけないわけではない。可読性の高いテストは保守も容易であり、次の人にとっても理解しやすい。「長くて複雑なテストは本当に嫌いです。初期化に30行を費やしているようなら、どうか生成メソッドの後ろに隠蔽してください。長いテストに開発者はイライラして、ディスプレイにへばりつついたままになります。プロダクションコードに長いメソッドを書かないようにしているのに、テストコードでなら許されるなどということがあるでしょうか。」
  3. 1フィクスチャを求めるパターンや組織のスタイルに決め打ちするな」 – 標準的な1クラスに対して1テストフィクスチャというパターンは、時としてうまく行かないこともある。

Lior Friedman氏はこれに次のルールを加えている。「ルール0 – 内部構造ではなく外的なふるまいをテストせよ」。つまり、クラスに対する期待値をテストするのであって現在の状態をテストするのではないということだ。

Ravichandran Jv氏はこれに自身のルールを付け加えている。

  1. 1テストに1アサーション(可能であれば)
  2. テストの内部に「if else」句があれば、分岐を個別のテストメソッドに移動せよ。
  3. テスト対象のメソッドに関して、そこにもif else分岐があったら、そのメソッドはリファクタリングするべきだ。
  4. メソッド名はテストの種類であるべきだ。たとえば、TestMakeReservationはTestMakeNoReservation()とは違う。

NUnitの作者であるCharlie Poole氏は「1テストに1アサーション」を「論理的なアサーション」と言い換え、次のように説明する。「時にテストAPIが表現力に欠けているせいで、望む結果を得るために複数の物理的なアサーションを書かなければいけないことがあります。NUnitフレームワークAPIの開発の大部分は、1つのアサーションがより多くを行えるようにする試みから生じたものでした。」

Bryan Cook氏は独自に注目すべき一覧を作っている。

  1. 必須:フィクスチャは一貫性を持って命名せよ
  2. 必須:テスト対象コードのネームスペースを模倣せよ
  3. 必須:Setup/TearDownメソッドは一貫性を持って命名せよ
  4. 要考慮:テストとプロダクションコードを分離せよ
  5. 必須:テストは機能に従って命名せよ
  6. 要考慮:期待される例外には"Cannot"という接頭語を用いよ

Cook氏は他にもたくさんのヒントを提示している。

最後に、2人がGerard Meszaros氏の書籍「xUnit Test Patterns: Refactoring Test Code」を勧めている。

なお、これまでInfoQで紹介した記事には次のものがある。Recommended TDD TutorialsDesigning for TestabilityUnit Testing Tips from GoogleTDDを根づかせる:導入の問題と解決策

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT