Skip to content

Instantly share code, notes, and snippets.

@atsuya046
Last active August 29, 2015 14:27
Show Gist options
  • Save atsuya046/d8141db1cb63598df335 to your computer and use it in GitHub Desktop.
Save atsuya046/d8141db1cb63598df335 to your computer and use it in GitHub Desktop.
ユニットテストのこと。あとspecs2のことも。

ユニットテストする意義

ユニットテストを書こう!http://qiita.com/kompiro/items/78f2c8d2022a685baa83

Maintainability

プロダクションコードの変更時、既存と振る舞いが変わる箇所はテストが失敗する。そのため、変更が影響を及ぼす範囲がわかる

ユニットテストを書くと、コードの振る舞いがテストコードに明示されるため、振る舞いを予測可能な範囲が増える

Design

ユニットテストを書くときは、APIの利用者になるため、APIの利用者から見て利用しやすいコードを目指すモチベーションを産みやすい

複雑なテストを書きたくないため、単機能に絞ったわかりやすいコードを目指すモチベーションを産みやすい

多数のテストに影響を及ぼさないクラスを目指すモチベーションを産みやすい

Documentation

プロダクションコードに書かれた処理がユニットテストに例示されるため、プロダクションコードの理解を助ける

上手にテスト

ユニットテストの仕組み

  • テストコードに対象のProductコードをimportしてテストランナー上でその動作を検証する
    • ProductコードにはModule性が求められる
    • DBや外部APIへのアクセス(JSだとDOM操作も)などがある場合はそのシミュレートが必要になる

テストを支える技術

  • Mock
    • テスト対象に依存するObjectを擬似Objectに変更してテストしやすくする.
    • ex.) DBアクセスを行うオブジェクトをMockしてテスト時にはDBアクセスを省略する
  • Stub
    • ユニットテストに邪魔な関数を任意の戻り値を返す関数に変更してテストしやすくする
    • ex.) 外部APIの呼び出す関数を任意の戻り値を返すように偽装してAPIアクセスを省略する
  • 関数型プログラミング
    • 副作用が局所化されるためtestableなコードを書きやすい
  • クリーンアーキテクチャ
  • DI

Specs2

Scalaのテストフレームワーク

http://etorreborre.github.io/specs2/

以下の機能(library)を標準で備えている

おまけ

REPL Driven Development

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment